自動化厨のプログラミングメモブログ │ CODE:LIFE

Python/ExcelVBA/JavaScript/Raspberry Piなどで色んなことを自動化

PythonからExcelのVBA(マクロ)を実行する方法

C:\macro_book.xlsmというExcelファイルのmsgというマクロをPythonから実行する場合は以下のようになる

import win32com.client  # ライブラリをインポート

excel = win32com.client.Dispatch("Excel.Application")  # インスタンス生成
excel.Visible = 1  # エクセルを表示する設定(0にすれば非表示で実行される)
excel.Workbooks.Open(Filename="C:\macro_book.xlsm", ReadOnly=1)  # ブックを読み取り専用で開く
excel.Application.Run('msg("aaa")')  # マクロ名を指定して実行(引数なしの場合マクロ名のみで実行可能)
excel.Workbooks(1).Close(SaveChanges=1)  # ブックを保存して閉じる(SaveChangesを0にすると保存せず閉じる)
excel.Application.Quit()  # 終了

なんでわざわざPythonから?という意見はごもっともなんだけど、実際の仕事で使ってる内容としては 「ECサイトのドロップシッピング商材の在庫更新を自動でやる」というもの。フローは以下の通り。

  1. 取引先の卸サイトにログイン
  2. 卸サイトから在庫データ(CSVやExcelファイル)を所定のフォルダにダウンロード
  3. 自社ECの在庫管理ツールから在庫データ(CSV)を所定のフォルダにダウンロード
  4. 2と3を元にエクセル上で商品コードごとに最新の在庫情報へ書き換える
  5. 在庫管理ツールにCSVファイルをアップロード

このうち1~3と5はPythonにSeleniumをインポートして行っているが、4のExcelでの在庫更新データの計算式が地味に複雑で(納期情報文言の正規化とか) わざわざPythonで作り直すのが面倒なため今回の「Pythonからマクロを実行する」ことが必要になったわけです。

意外とシンプルにかけたので満足していますが、やはり言語をまたぐとエラー処理とかどうしよ・・・ってかんじ。

Pythonでスクレイピングしようと思ってScrapy入れようとしたらエラーになった話

sutaba-mac.site

$ pip install scrapy

でインストールすればええんやな、楽勝。 ・・・。 めっちゃエラーでるやん。

Command "c:\users\1953.three-i\appdata\local\continuum\anaconda3\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\1953~1.THR\\AppData\\Local\\Temp\\pip-install-3mpbwq60\\Twisted\\setup.py';f=getattr(tokenize, 'ope
n', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\1953~1.THR\AppData\Local\Temp\pip-record-imjhck90\install-record.txt --single-version-externally-man
aged --compile" failed with error code 1 in C:\Users\1953~1.THR\AppData\Local\Temp\pip-install-3mpbwq60\Twisted\
続きを読む