web-dev-qa-db-ja.com

Pythonを使用してMS Officeマクロをプログラムしますか?

私は最近、Pythonでプログラミングする方法を自分自身に教えるプロジェクトとして取り上げました。全体として、私はそれに感銘を受けたと言わざるを得ません。

以前、私は通常、ほとんどがMS Excel(ただし、MS AccessとWordも少し)のVBAでのプログラミングにこだわっており、Python 1つのコマンドで簡単に行えます。

プログラミング力とPython=の使いやすさを同時に実現しながら、Office(主にExcel)のさまざまなツールを利用する)を活用するための合理的な方法があるかどうか疑問に思っていましたか?

27
Jesse

クロスプラットフォームのセットがありますPythonユーティリティ-xlrd、xlwt、xlutilsと呼ばれます-Excelファイルの読み取りと書き込み用です。いくつかの制限があります(たとえば、マクロを処理できないと思います)でも、Windows以外のプラットフォームでExcelファイルを使用できる場合は、それを使用できます。参照: http://www.python-Excel.org/

また、SOこれを含むこの種のトピックをすでに扱っている質問があります: (COM以外に)Excelをリモート制御するより良い方法はありますか?

9
GreenMatt

そのとおり。 pywin32の一部であるwin32comモジュールを使用したいとします( get it here )。

Pythonを使用するVBAでマクロを記述し、Pythonでマクロを呼び出すだけで、Pythonの統合を本当に簡単にできることがわかりました。次のようになります。

from win32com.client import Dispatch as comDispatch

xl = comDispatch('Excel.Application')
xl.Workbooks.Open("Macros.xls", False, True)
xl.Run("Macros.xls!Macro_1")

SOにはたくさんの例があると思います... this one のように。

22
Jason Coon

または、IronPythonをご覧ください。 IPyは、Python 2.6のネイティブ.NET実装です。 http://www.codeplex.com/ironpython で見つけることができます。

いくつかのプロジェクトで使用しています。 COMを使用して「外部から」使用できます。また、VBAと同様の環境を提供するIronPythonコードを呼び出すScriptHostを使用してExcelアドインを作成することもできます。

.NET DLLであるため、IPyは最新のWindows .NETスタックに非常によく統合されます。

7
raindog

上記のxlrd、xlwt、xlutilsパッケージは、65,000行と256列のサイズ制限がある.xlsファイルの読み取りと書き込みのみが可能です。それはさておき、それは良いツールです。

しかし、.xlsxファイルを読み書きできる別のpython-ExcelパッケージであるOpenPyXLに移動しました。また、私は使いやすく、ドキュメントも優れています。

OpenPyXL: http://packages.python.org/openpyxl/index.html

5
sequoia

これは昔からの質問ですが、他の人が検索で指摘できるようにここに置いておきます。

ここで説明していませんが、私がいつも使用しているオプションの1つは、COMサーバーをPythonから作成し、OfficeアプリケーションのVBAから呼び出すことです。COMサーバーをPython at: http://timgolden.me.uk/pywin32-docs/html/com/win32com/HTML/QuickStartServerCom.html

最終的には、VBAのCreateObject()の呼び出しによって作成できるCOMサーバー(インプロセスにすることを忘れないでください)になります。次に、CreateObject()で作成されたCOMオブジェクトを使用する場合と同様に、そのメソッドを呼び出します。 Pythonスクリプトでシングルステップを実行することはできませんが、Pywin32ディストリビューションのwin32traceutilを使用してロギングをインターセプトできます。問題なく動作します。

3
user7969

ここに便利なリンクがあります:

http://continuum.io/using-Excel

  1. Pyvotを試してください– A Python to/from Excel Connector from Microsoft:

http://pytools.codeplex.com/wikipage?title=Pyvot

同じ開発者のPTVSも本当に好きです。これまでに経験したPythonで最高のデバッグを提供するチーム。

2。

VBAでできること+ Pythonは次のとおりです。

入力を受け取り、テキストファイルとしてまたはコンソールから出力を生成するpyスクリプトをコンパイルします。次に、VBAはpyの入力を準備し、事前にコンパイルされたpyスクリプトを呼び出して、その出力を読み戻します。

3。

PythonスクリプトをサポートするOpenOfficeまたはLibreOfficeを検討してください。

これは、COMまたはMSスクリプトインターフェイスで使用可能なオプションがニーズを満たさないと想定しています。

4。

これは無料のアプローチではありませんが、言及する価値があります(ForbesとNew York Timesで取り上げられています)。

https://datanitro.com

5。

商用利用は無料ではありません:

PyXLL-Python=)で記述された関数をExcelで呼び出せるようにするExcelアドイン。

3
denfromufa