naoki86star

インターネットの片隅でなにかしら書いてみる

openpyxl

 sqliteでクエリーした結果をいくらか保存しておくようにxlsxに出力しておきたくなってきた。
 ずいぶん前にiron pythonでCOM経由で処理してくれるモジュールあったような記憶があるのですが、遅かったしWindowsのみで動いていた気がします。*1

 ubuntu(linux)で動かせるのがあった。openpyxl · PyPI

 pip3 install openpyxl で

Successfully installed et-xmlfile-1.0.1 jdcal-1.4.1 openpyxl-2.6.2

と来たので、openpyxl含めて3モジュール使われているらしい。参照がやたら多いpackageは、(もちろん必要だから参照するんだろうけど)やっぱり好きではない。

 exampleがシンプルかつ要点含んでいて自分用には速攻で使えるようになりました。、範囲指定のソートとかグラフオブジェクトみたいなのがどのくらい扱えるのか、自分には未知数。(190722update) マクロ込みxlsmファイルをテンプレートにして保存することは出来る模様。

wb = load_workbook(filename='template.xlsm', keep_vba=True)
..
wb.save('myoutput.xlsm')

 historyみると2014には存在していたのですね。。。

2019/7/16追記

XlsxWriterてのがあったのも思い出しました。なんか別の作業でこれを使ってスクリプトを書いたことあったみたいです。まったく覚えてなかったのですが、古いディレクトリみていたらそんなことあったと思い出しました。

2020/09/02追記

ubuntu18上で、apt install openpyxlしたときに、入ってくるopenpyxlのバージョンは2.4.9となってましたが、これがちょっと自分にトラブルでした。グラフオブジェクトを含んだxlsmを読み込んで、セルデータを追加して保存したときに、グラフオブジェクトが削除されてしまってました。pipからインストールしたものではそうならなかったです。pipからinstallしたものはバージョン3.0.2となってました。この件では少なくとも2.6以降は大丈夫なようです。どうも、保存時にグラフ保存していないというより、そもそもload_workbookでchartを読み込む機能が以前はなかった模様でした。

*1:COM使うから当たり前か