初心者のPython学習(自分のメモ代わりですので、途中で記事が終わることもありますがご了承ください)
なにが良いの
私感的ですが、ExcelでPythonを制御(正しくはExcelからPythonのスクリプトを実行させて、その結果をExcelに貼り付ける。またはExcelに設定してあるデータを読み込んでPythonで解析や修正を行いExcelに反映させる)することで、出力結果を見やすくすることができる。
有名なモジュールは3つ
ほかにもいっぱい有る用だけど、自分が触ったのは2つ。簡単に比較すると以下のとおり、xlwingsは速度が遅くてExcelソフトが必要だけど会社の業務効率化で使うならxlwingsかなあ。自分しか使わなくてExcelソフトがGoogle スプレッドシートやWPSなどの互換性を使っていると言うのであればopenpyxlでも良いかもしれない。自分の環境ではOffice360でExcelを使っているのでxlwingsで勉強して行きたい。pywin32と言うのもあるけど、これはExcel専用では無くPythonからWindowsのAPIを呼び出すライブラリ群
xlwings
Excel本体を操作してPythonからデータのやりとりを行うので、Excelの関数とか全てサポート。当然、起動するパソコン内にはExcelが必要。Office正規ユーザが使うならこっちが良いかもしれません。xlwingsはBSDライセンスのPythonライブラリですので商用利用(会社での業務利用)は可能。
BSD 3-clause licenseになりますので、社内の業務改善で利用するために公式のサイトからダンロードして使用するのには問題なし。
openpyxl
直接Excelのバイナリファイルを操作するので、起動するパソコンにはExcelが不要。処理が速いが処理できるファイルはxlsx/xlsm(Excel2003)のみ。
xlwingsでいろいろ勉強してゆく
先に記載したように、手持ちにOffice360があるのでxlwingsで勉強して行きたい
xlwingsインストール
pip install "xlwings[all]"
pip install --upgrade xlwings
あとExcelのアドオンも必要です(無くても良いですが、あった方が便利です)
xlwings addin install
上記のアドオン(アドイン)を入れることで、Excelを起動すると上部のリボンの部分に「xlwings」というメニューが追加されます
アドオンの使い方
xlwings quickstart myproject
上記のコマンドを打ち込むと「myproject」というディレクトリを作成し
配下に「myproject.py」と「myproject.xlsm」ファイルが作成される。
マクロ形式のExcel(*.xlsm)を起動すると、リボンに「xlwings」が追加される
簡単に説明すると
Run main:Pythonのスクリプト(xxxx.py)を実行させる
Import Function:Pythonのスクリプト(xxxx.py)で定義した自分オリジナル関数を定義して利用できる
Run main
以下の様に、main()を定義して実行形式にする必要があります
import xlwings as xw def main(): wb = xw.Book.caller() sheet = wb.sheets[0] if sheet["A1"].value == "Hello xlwings!": sheet["A1"].value = "Bye xlwings!" else: sheet["A1"].value = "Hello xlwings!" @xw.func def hello(name): return f"Hello {name}!" if __name__ == "__main__": xw.Book("hello.xlsm").set_mock_caller() main()
Import Function
以下の様に@xw.funcで定義して「hello(name)」(nameは引数ね)を定義することで、Excel内で「=hello(セル指定)」という関数を使う(定義する)ことが出来ます。VBAでも、関数定義じゃ有りませんが同じような処理が出来ますが、関数で定義すれば好きなセル位置での処理が出来るというメリットがあります。
@xw.func def hello(name): return f"Hello {name}!" @xw.func def hello2(name): return f"Hello {name}!" @xw.func def hello3(name): return f"Hello {name}!"
連続で定義すれば=hello()、=hello2()、=hello3()と複数の関数が定義できる。(上述の例では同じですけど・・)
関数オートコンプリートが出ない
Excelって関数の始めの文字を入れるとオートコンプリート(使える関数)が出てくるハズなんだけど、=hello()が出てこなくなった。
理由は2つ
xlwingsのバージョンズレと、Excel本体の設定準備です。
xlwingsのバージョンは以下のコマンドで常時合わせておきましょう
・pip install –upgrade xlwings
・xlwings addin install
そして、Excel本体の設定準備です。詳細はhttps://docs.xlwings.org/ja/latest/udfs.htmlに書いてありますが。
Excelのファイル>オプション >トラストセンター > トラストセンター の設定> マクロの設定>開発者向けのマクロ設定>VBAプロジェクトオブジェクトモデルへのアクセスを信頼する(V)にチェックを入れ有効化します。
そうすることで、関数オートコンプリートが出ます。Import Functionを忘れずに押しましょう。