MAYA,Python MAYAのPythonでEXCELのファイルを読み書きする方法-MAYA アーティストのスクリプト入門-

MAYAのPythonでEXCELのファイルを読み書きする方法-MAYA アーティストのスクリプト入門-

maya_python_import_xlrd_xlwt_about_excel_topimage

プロジェクトのチーム内でMAYAのデータを管理する際にMAYAで直接EXCELのデータにアクセスしたくなる事があります。

キャラクターや小物類、他のデータとの繋がりなど、プロジェクトの進行に係る事柄のデータにはEXCELを使っている組織は多いでしょう。

膨大なキャラクターや小物類などのデータをMAYAで扱うためにデータの置場所をウロウロ探し回るのは時間のロスなので、EXCELの一覧等で確認するのですが、大きプロジェクトであれば、似たような内容のEXCELデータが複数存在し、求めているファイル自体を探す羽目にもなりかねません。

ですがMAYAでEXCELのデータにアクセスできれば、一々EXCELを開く必要もありませんし、複数のファイル間の内容をプログラミングで紐付けてMAYAを扱うスタッフが扱いやすいデータにする事もできます。

そこで記事では、MAYAのPythonでEXCELのデータファイルを読み書きする方法を紹介したいと思います。

PythonでEXCELのデータファイル「.xls」や「.xlsx」を読み書き出来るモジュールは幾つかありますがこの記事では読み書きがそれぞれ別のモジュールになっている

xlrd」「xlwt

を紹介します。


EXCELのデータファイル「.xls」と「.xlsx」

EXCELのデータファイルは主に「.xls」と「.xlsx」があります。

Office2003 までが「.xls」、それ以降が「.xlsx」と説明されることが多いですが、「.xls」だけでもEXCEL5.0とかEXCEL95とか在るので面倒くさいファイルだなとは思います。

「.xls」と「.xlsx」の最大の違いは、列数と行数の上限値でしょう。

「.xls」は列数の上限が256 、行数の上限が16384
「.xlsx」の列数の上限は65536、行数の上限が1048576

プロジェクトが大きくなればなるほど「.xls」では心もとない場面も多くなるでしょう。

PythonでEXCELのデータファイルが扱えるモジュール「xlrd」「xlwt

xlrd」と「xlwt」はEXCELデータファイルを読み書きする為のPythonモジュールです。

読み込み用 書き込み用で別れていますが、対応するファイル形式に違いがあります。

  • xlrd」.xls および.xlsx からデータを読み込むことが出
  • xlwt」.xls に書き込む事ができます。


※このパッケージを管理制作しているプロジェクトでは他に以下のモジュールがあるようです。
openpyxl」.xlsx の読み書き
xlsxwriter」.xlsx の書き込み用 特にグラフ
xlutils」EXCELファイルをコピーしたりフィルターする為の機能

MAYAのPythonで「xlrd」と「xlwt」モジュールを使えるようにする

MAYAのPythonでEXCELのファイル「.xls」「.xlsx」に対して読み書きする為に「xlrd」と「xlwt」モジュールをインポートします。

「xlrd」と「xlwt」モジュールをインポート


実行:

xlrdモジュールをインポートしようとすると、エラーと共にxlrdという名前のモジュールは無いと返されてしまいます。

「xlrd」はまだインポートできません

EXCELファイルのデータを扱うことが出来るモジュール「xlrd」はPythonの標準モジュールでは無いので、MAYAに備わっているPythonのままではMAYAで扱うことが出来ません

MAYAのPythonにモジュールを追加する必要があります。

xlrd xlwt モジュールをダウンロード

xlrd xlwt モジュールをPythonのパッケージを管理している以下のサイトからダウンロードします。

https://pypi.org/project/xlrd/#files


Download files から「xlrd-1.2.0-py2.py3-none-any.whl」をダウンロードします。

pypi.org


ダウンロードしたファイル「xlrd-1.2.0-py2.py3-none-any.whl」を解凍します。

「xlrd-1.2.0-py2.py3-none-any.whl」を解凍


この3個のフォルダをMAYAのロケーションディレクトリのPythonのパッケージフォルダの下に配置します。

C:/Program Files/Autodesk/Maya2020/Python/Lib/site-packages

もし以下の表示がでたら「すべての項目にこれを実行する」にチェックして[続行]をクリック

「すべての項目にこれを実行する」にチェック


これでMAYAで「xlrd」が使えるようになりPythonでEXCELデータを読み込める準備ができました。

早速MAYAのスクリプトエディターで「xlrd」モジュールをインポートしてみしょう。

「xlrd」と「xlwt」モジュールをインポート


実行:

今回はエラーが返される事は無くインポートされました。

今回はエラーが返される事は無くインポートされました


EXCELファイルを読み込める「xlrd」は使えるようになりましたが、書き込みできる「xlwt」はまだインポートできません。

「xlwt」はまだインポートできません


xlwt」モジュールも「xlrd」と同様に以下のサイトからダウンロードしてPythonのパッケージフォルダに配置します。

https://pypi.org/project/xlwt/#files


ダウンロードしたファイルを解凍し、2つのフォルダを以下のディレクトリに置きます。
C:/Program Files/Autodesk/Maya2020/Python/Lib/site-packages

「xlwt」モジュール

これでMAYAのPythonでEXCELのデータファイルを読み書きする事が可能になりました。

MAYAのPythonでEXCELのデータファイル.xls を読み込む 

都道府県のデータを入力したEXCELのデータファイル「todofuken.xls」を用意しました。

このデータファイルをMAYAのPythonで読み込み値を取得してみたいと思います。 

todofuken.xls


「todofuken.xls」を読み込んで、県庁所在地を出力するPythonスクリプトを書きました。

import xlrd

open_xls = xlrd.open_workbook("D:/liquidJumper/todofuken.xls")

open_xls_sheetName = open_xls.sheet_by_index(0)

for i_open_xls_sheetName in range(1,open_xls_sheetName.nrows ):
    print(open_xls_sheetName.cell_value(i_open_xls_sheetName,0))


説明:

open_xls = xlrd.open_workbook("D:/liquidJumper/todofuken.xls")

open_workbook()関数で引数に指定したパスでEXCELファイルをオープンします。オープンしたファイルオブジェクトを変数open_xlsに代入。

open_xls_sheetName = open_xls.sheet_by_index(0)

sheet_by_index()でEXCELファイルのシートをインデックスで指定します。今回は最初のシートを指定するので「0」

for i_open_xls_sheetName in range(1,open_xls_sheetName.nrows ):

range(1,open_xls_sheetName.nrows ) でセル番号2行目から入力されている最後の行までの数をfor文で処理します。

print(open_xls_sheetName.cell_value(i_open_xls_sheetName,1))

.cell_value(行番号,列番号) を指定して出力

実行:

B列の2行目から入力されている行数だけfor文で処理され、都道府県庁所在地が出力されました。

青森市
秋田市
金沢市
水戸市
盛岡市
松山市
大分市
大阪市
岡山市
那覇市
高松市
鹿児島市
横浜市
岐阜市
京都市
熊本市
前橋市
高知市
さいたま市
佐賀市
大津市
静岡市
松江市
千葉市
東京 (新宿区)
徳島市


補足説明:

.sheet_by_index() 
はインデックスを指定して目的のシートを選択しますが

.sheet_by_name(“シート名”) 
を使うとシートの名前でシートを選択を出来ます。

import xlrd

open_xls = xlrd.open_workbook("D:/liquidJumper/todofuken.xls")

open_xls_sheetName = open_xls.sheet_by_name("Sheet1")


open_xls_sheetName.nrows 
で入力されいる行数を取得できましたが、列数を取得する場合はopen_xls_sheetName.ncols  
を使うと取得できます。

import xlrd

open_xls = xlrd.open_workbook("D:/liquidJumper/todofuken.xls")

open_xls_sheetName = open_xls.sheet_by_index(0)

print("%s 行目まで入力されてます" % open_xls_sheetName.nrows)
print("%s 列目まで入力されてます" % open_xls_sheetName.ncols )    


実行:


何行目まで入力済されているかと、何列目まで入力されているかを取得できました。

27 行目まで入力されてます
4 列目まで入力されてます


セルの値を取得するには

.cell_value(行番号,列番号)

を使うと取得できます。

import xlrd

open_xls = xlrd.open_workbook("D:/liquidJumper/todofuken.xls")

open_xls_sheetName = open_xls.sheet_by_name("Sheet1")

print(open_xls_sheetName.cell_value(12,2))


結果:

鹿児島県の人口の値が取得できました。

1648752.0

MAYAのPythonでEXCELのデータファイル.xls に書き込む

新規のファイル「wakayama.xls」を用意して、リストにした値を入力したいと思います。

import xlwt

excel_file = "D:/liquidJumper/wakayama.xls"
list_wakayama = [u"和歌山県",u"和歌山市","963,850","4,724.68"]

wb = xlwt.Workbook()

ws = wb.add_sheet("Sheet1")

for i_ncols in range(len(list_wakayama)):
    ws.write( 0 , i_ncols, list_wakayama[i_ncols])

wb.save(excel_file)


説明:


list_wakayama = [u"和歌山県",u"和歌山市","963,850","4,724.68"]

入力する値をリストにしました。

wb = xlwt.Workbook()

ワークブックオブジェクトを変数「wb」に代入

ws = wb.add_sheet("Sheet1")

入力するシートを選択して変数「ws」に代入

for i_ncols in range(len(list_wakayama)):
    ws.write( 0 , i_ncols, list_wakayama[i_ncols])

1行目にfor文を使ってリストの値を入力します。
値を入力するには write( 行, 列, 値) を使います。

wb.save(excel_file)

ワークブックをセーブしてファイルを保存します。

実行:

一行目にリストの内容が入力されました。

一行目にリストの内容が入力されました。

まとめ

MAYAのPythonでEXCELデータにアクセスする方法を紹介しました。

EXCELデータを読み書きする為のモジュール

  • xlrd」.xls および.xlsx からデータを読み込むことが出
  • xlwt」.xls に書き込む事ができます。

この「xlrd」「xlwt」をダウンロードしてMAYAのロケーションディレクトリにあるPythonフォルダに置くとMAYAのPythonでモジュールが使えるようになります。

MAYAでEXCELデータが扱えるようになると管理関係のスクリプトが作れるようになるので、プロジェクト進行に役に立つと思います。


おすすめの関連記事
コチラの記事も読まれています
あわせてよく読まれている記事