Нужен скелетный код для вызова Excel VBA из PythonWin
Вопрос
Мне нужно вызвать макрос 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