Нужен скелетный код для вызова Excel VBA из PythonWin - PullRequest
2 голосов
/ 06 декабря 2008

Мне нужно вызвать макрос VBA в книге Excel из скрипта Python. Кто-то предоставил книгу Excel с макросом. Макрос получает обновленные значения из внешней базы данных и выполняет довольно сложное массирование данных. Мне нужны результаты этого массажа, и я не хочу дублировать это в моем скрипте Python, если я могу избежать этого. Так что было бы здорово, если бы я мог просто вызвать макрос из моего скрипта и получить результаты с массажем.

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

Ответы [ 2 ]

6 голосов
/ 06 декабря 2008

ОК, я понял! Спасибо за помощь по методу Application.Run. Эта информация, а также «Справочник по Microsoft Excel Visual Basic»: http://msdn.microsoft.com/en-us/library/aa209782(office.10).aspx--as, рекомендованный Хаммондом и Робинсоном в «Программирование 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
0 голосов
/ 06 декабря 2008

Извините, я недостаточно знаю Python. Тем не менее, следующее должно помочь.

Объект приложения Excel имеет метод Run, который принимает имя макроса вместе с аргументами.

Предположим, что в книге есть макрос с именем test.


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

Вы можете вызвать это с помощью Application.Run "test", 1234

Это вызовет макрос и покажет окно сообщения с «hello world 1234».

...