Need skeleton code to call Excel VBA from PythonWin

核能气质少年 提交于 2019-11-27 03:00:25

问题


I need to invoke a VBA macro within an Excel workbook from a python script. Someone else has provided the Excel workbook with the macro. The macro grabs updated values from an external database, and performs some fairly complex massaging of the data. I need the results from this massaging, and I don't really want to duplicate this in my Python script, if I can avoid it. So, it would be great if I could just invoke the macro from my script, and grab the massaged results.

Everything I know about COM I learned from "Python Programming on Win32". Good book, but not enough for my task at hand. I searched, but haven't found any good examples on how to do this. Does anyone have any good examples, or perhaps some skeleton code of how to address/invoke the VBA macro? A general reference (book, web link, etc) on the Excel COM interfaces would also help here. Thanks.


回答1:


I am sorry, I dont know python enough. However, the following should help.

Excel's Application object has a Run method - which takes the name of the macro alongwith arguments to it.

Lets assume that the workbook has a macro named test.


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

You can call this using Application.Run "test", 1234

This will call the macro and show the messagebox with "hello world 1234".




回答2:


OK, I got it! Thanks for the help on the Application.Run method. This info, plus the "Microsoft Excel Visual Basic Reference": http://msdn.microsoft.com/en-us/library/aa209782(office.10).aspx--as recommended by Hammond & Robinson in "Python Programming on Win32"--was what was needed.

Here's the skeleton code:

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


来源:https://stackoverflow.com/questions/345920/need-skeleton-code-to-call-excel-vba-from-pythonwin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!