Pythonをインストールできない環境なのにPython!?
な、何を言っているのかわからねーと思うが、俺もわからない・・・ということもなく、わかる人にはわかる話かもだけど。
とある業界では未だにVBAによるExcelツールは活発に使われている。
やはりユーザ業務におけるExcelの存在感は圧倒的であり、
そのためどうしてもExcelVBAが必要になってくる。
だから、普通にVBAを書けばいいじゃんというのは最もだと頭ではわかっているんだけど、
でもやはりVBAは体が受け付けない、
RubyなりPythonなりもっと流行り(?)の言語でツールを作りたい!
ということで、PythonでExcelVBAツールを駆逐しようという話。
ただ、とある業界では業務端末にPythonをインストールすることが難しい。
(当然、調整のうえ可能な場合もあるが)
そこで、Pythonをインストールできない環境でもPythonベースで作ったExcelツールを
実行するための手順を書いてみる。
その前に
この投稿は正確にはxlwingsを使ってPythonでExcelにあれこれするツールが対象です。
xlwingsについて知らない場合、事前に以下の投稿を読んで見てください。
Python(Xlwings)を使ってExcelを操作してみる
ExcelからPythonを実行する
ツールを作成する環境
環境 | バージョン |
---|---|
window | 7 |
python | 3.4.3 (Anaconda 2.3.0) |
pyinstaller | 3.2 |
※作ったツールを実行する環境もwindows7です
方法
- Excelから実行したいpythonのスクリプトをexe化
- xlwingsを使ってExcelから作成したexeを実行して、実際の処理を実行する
準備
exe化するためのパッケージpyinstaller
をインストールする
conda install pyinstaller
pyinstaller -v
手順
作成したpythonスクリプトをexe化する
pyinstaller tool.py --onefile
作成したexeファイルをExcelから実行するようにマクロを定義する
Sub SampleCall()
RunFrozenPython ("tool.exe")
End Sub
以前書いたpythonのスクリプトを実行する場合の以下のコードを上のコードに置き換えるイメージ
Sub SampleCall()
RunPython ("import myproject;myproject.myfunction()")
End Sub
ただし、exeを呼ぶときは実行したいfunctionを指定できないみたいなので、
pythonスクリプト側で、スクリプトが実行された場合に
呼びたいfunctionが実行されるようにしておく必要がある。
終わり
これで、登録したマクロを実行すれば、exe化したpythonスクリプトが実行され、あれこれ処理が実行される。
これでDBからデータを取得して、あれこれ加工して、Excel上に値を貼り付け、
帳票を作成するなんてツールをVBAを一切書かないでPythonでかけるようになった\(^o^)/
感想
まぁこんな遠回りするくらいなら、おとなしくVBAを書けよって話なんだろうなw
一応これでちゃんとツールは作れるんだけど、xlwingsを使ったスクリプトをexe化すると
それだけで130MBくらいのツールになる(苦笑)
本業務で使うかというと・・・(´・ω・`)