2

Python スクリプトから Excel ワークブック内で VBA マクロを呼び出す必要があります。他のユーザーが Excel ブックにマクロを提供しています。マクロは、外部データベースから更新された値を取得し、かなり複雑なデータのマッサージを実行します。このマッサージの結果が必要ですが、回避できるのであれば、Python スクリプトでこれを複製したくありません。したがって、スクリプトからマクロを呼び出すだけで、マッサージされた結果を取得できれば素晴らしいと思います。

COM について知っていることはすべて、「Win32 での Python プログラミング」から学びました。良い本ですが、目の前の仕事には十分ではありません。検索しましたが、これを行う方法に関する良い例は見つかりませんでした。誰かが良い例を持っていますか、またはおそらくVBAマクロをアドレス指定/呼び出す方法のスケルトンコードを持っていますか? ここでは、Excel COM インターフェイスに関する一般的なリファレンス (書籍、Web リンクなど) も役立ちます。ありがとう。

4

2 に答える 2

6

はい、分かりました!Application.Runメソッドのヘルプをありがとう。この情報に加えて、「Microsoft Excel Visual Basicリファレンス」:http: //msdn.microsoft.com/en-us/library/aa209782(office.10).aspx --Hammond&Robinsonが「PythonProgramming on Win32"-必要だったものでした。

スケルトンコードは次のとおりです。

import win32com.client
xl=win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Open(Filename="<your Excel File>",ReadOnly=1)
xl.Application.Run("<your macro name>")
#...access spreadsheet data...
xl.Workbooks(1).Close(SaveChanges=0)
xl.Application.Quit()
xl=0
于 2008-12-06T15:56:33.723 に答える
1

申し訳ありませんが、Pythonについては十分に知りません。ただし、次のことが役立つはずです。

ExcelのApplicationオブジェクトにはRunメソッドがあります。このメソッドは、マクロの名前と引数を取ります。

ブックにtestという名前のマクロがあると仮定しましょう。


Sub test(ByVal i As Integer)
MsgBox "hello world " & i
End Sub

これは、Application.Run "test"、1234を使用して呼び出すことができます。

これにより、マクロが呼び出され、「helloworld1234」というメッセージボックスが表示されます。

于 2008-12-06T06:01:41.503 に答える