PythonでExcelを操作するライブラリ、「openpyxl」。
コレを取扱いを楽にする為のクラスを作ってみました。
コード
コードはgithubにアップしました!
クラスメンバとメソッドの概要は、readmeに記載しました。
ざっくりとした構成
ざっくりと解説すると、下記のようなメソッドを用意してみました。
- 初期化
- ブック/シートを開く
- シートの作成
- シートの存在チェック
- ブック/シート開いているか判定
- 空セル判定
- 全データ読込(テーブル読込)
- 横方向への書き込み
- 保存
デバッグプリントのコメントアウトや「あれ?これないの?」みたいな機能が多々あるかもしれません。
自分用に作っていたというのが大きいので……
でもコレを作って割と便利になりました。
何が便利なの?
ではこんなことして具体的に何が便利なのか?
オブジェクト管理がいらない
まず「オブジェクト管理がいらない」という点です。
実直に使用すると
import openpyxl as xl # ブックを開く bookName = "data.xlsx" book = xl.load_workbook(bookName, data_only=True) # シートを開く sheet = self.book.get_sheet_by_name(sheetName) # セルを読み込む val = sheet.cell(row=1, column=1).value # セルに書き込む sheet.cell(row=2, column=1).value = val # ブックを保存 book.save(self.bookName)
のようにbook/sheetのオブジェクトを絡めた記述を、都度書かないといけません。
が、コレを使えばコールするだけ。
やってることは違うけどこんな感じ。
from Xls import Xls # ブックとシートを開く xl = Xls("data.xlsx", "data") # セルを表ごと読み込む xl.loadAllData(1, 1) # 読み込んだデータを取得 data = xl.data
インスタンス生成時に、引数でファイル名・シート名を渡してあげれば準備完了となります。
大したことないかもしれないけど、それがなんだか面倒くさくて。
表を読込むメソッド
表を読込むメソッド。
loadAllData(行番号, 列番号)
こんな感じで使います。
xl = Xls("data.xlsx", "data") xl.loadAllData(1, 1) data = xl.data # [['A1', 'B1', 'C1', 'D1'], ['A2', 'B2', 'C2', 'D2'], ['A3', 'B3', 'C3', 'D3']]
A1からズラッとデータが並んでいるとします。
この関数で読み込むと、2次元配列で、各行ごとに配列化されたデータを取得できます。
[ ['A1', 'B1', 'C1', 'D1'], ['A2', 'B2', 'C2', 'D2'], ['A3', 'B3', 'C3', 'D3'] ]
取得を開始するセルは、引数で(行, 列)を指定できます。
横方向に一気に書込む
横方向に配列のデータを、一気に書込むメソッド。
writeHorizontal(データ配列, 行番号, 列番号)
こんな感じで使います。
x = Xls("data.xlsx", "data") vals = ["A", "B", "C", "D"] x.writeHorizontal(vals, 5, 1) x.save()
すると、5行目のA列目から横に"A"~"D"が書かれていますね。
配列につっこんだ大量のデータを、ループで1行ずつ一気に書込むことができます!
ちなみに、最終的に「saveメソッド」は忘れずにコールしてくださいね。
変更が反映されない状態で終わってしまうので……(笑)
値の読込
単純に1セルの値を読込たい時は「getCellValue」をコールします。
getCellValue(行番号, 列番号)
あとがき
自分にとっての便利を求めた感があるので、人が使いやすいかはわかりませんが、いいなと思ったらご活用くださいませ。