Вопрос

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

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

Это было полезно?

Решение

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

Объект приложения Excel имеет метод 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 &; "rel =" noreferrer "> http://msdn.microsoft.com/en-us/library/aa209782 (office.10) .aspx - как рекомендовано Hammond & amp; Робинсон в "! Программе 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top