日記や趣味、学んだことを忘れないようにして記録するサイト

mz8k

Python

ExcelでPythonを制御する_1

更新日:

2:スポンサーリンク

初心者の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」が追加される

xlwingsgがtつついついkついかついつ

1:スポンサーリンク

簡単に説明すると
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)にチェックを入れ有効化します。

1:スポンサーリンク

そうすることで、関数オートコンプリートが出ます。Import Functionを忘れずに押しましょう。

3:スポンサーリンク

-Python
-

Copyright© mz8k , 2021 All Rights Reserved Powered by STINGER.