Мне нужно вызвать макрос VBA в книге Excel из скрипта Python. Кто-то еще предоставил книгу Excel с макросом. Макрос получает обновленные значения из внешней базы данных и выполняет довольно сложную обработку данных. Мне нужны результаты этого массажа, и я действительно не хочу дублировать это в моем скрипте Python, если я могу этого избежать. Так что было бы здорово, если бы я мог просто вызвать макрос из своего скрипта и получить обработанные результаты.
Все, что я знаю о COM, я узнал из "Python Programming on Win32". Хорошая книга, но для моей задачи ее недостаточно. Я искал, но не нашел хороших примеров, как это сделать. Есть ли у кого-нибудь хорошие примеры или, возможно, какой-то скелетный код того, как обращаться / вызывать макрос VBA? Здесь также может помочь общий справочник (книга, веб-ссылка и т. д.) По COM-интерфейсам Excel. Спасибо.





Извините, я недостаточно знаю питон. Однако следующее должно помочь.
У объекта Excel Application есть метод Run, который принимает имя макроса вместе с его аргументами.
Предположим, что в книге есть макрос с именем test.
Sub test(ByVal i As Integer)
MsgBox "hello world " & i
End Sub
Вы можете вызвать это с помощью Application.Run "test", 1234
Это вызовет макрос и отобразит окно сообщения с надписью «hello world 1234».
Ладно, я понял! Спасибо за помощь по методу Application.Run. Эта информация, а также «Справочник по Microsoft Excel Visual Basic»: http://msdn.microsoft.com/en-us/library/aa209782(office.10).aspx - как рекомендовано Хаммондом и Робинсоном в «Программировании Python на 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
Спасибо. Это некоторым помогает. Со стороны pywin32 я все еще ищу что-то, что показывает начальные шаги для открытия файла и ссылается на весь интерфейс. PyWin32 показывает несколько частей иерархии интерфейса, поддерживающих метод Run.