2017-02-08 11 views
0

Я использую Python для открытия довольно сложного файла Excel. Мне удалось открыть таблицу, заполнить данные и запустить макрос. Проблема в том, что этот макрос в конце возвращает сообщение о результате как окно сообщения, которое требует, чтобы пользователь нажал кнопку «ОК» и не будет продолжать, пока кнопка не будет нажата. Мне нужно сделать этот процесс полностью автоматическим, поэтому мне нужно нажать «ОК» на Python. Как я могу это сделать? Было бы здорово, если бы я мог читать сообщение из ящика сообщений, но это не обязательно.
Вот мой код:Закрыть (и прочитать) сообщение из Excel в Python

import win32com.client 
xl=win32com.client.Dispatch("Excel.Application") 
xl.Workbooks.Open(Filename="my_excel.xlsm") 
xl.Application.Run("'my_excel.xlsm'!my_macro") 

# here I need to click OK, but my code will never reach this place until I'll click it manually 

xl.Application.Quit() 
+0

Вы можете изменить макрос, чтобы не возвращать окно сообщения? – sous2817

ответ

0

Предполагая, что вы не можете изменить фактический код макроса, потому что он защищен паролем (вы должны указать, что в первую очередь, чтобы избежать путаницы), мое единственное предложение было бы сделать что-то скорее «аналог» Controlling mouse with Python

+0

Я не знаю, будет ли это работать, потому что VBA будет управлять машиной, не так ли? – sous2817

+0

Я думаю, вы правы. Чтобы решить эту проблему, необходимо создать два потока (http://stackoverflow.com/questions/2905965/creating-threads-in-python). Второй должен работать на основе счетчика времени, если нет другого индикатора, что макрос закончил. Если макрос обычно занимает 10 минут, второй поток должен начать свою работу через 10 секунд и повторять каждую минуту. Или, может быть, есть способ прослушать системные сообщения-события каким-то образом, но тогда также нужно будет добавить обработку событий. Ver расплывчато, но OP все еще не заявил, если он может изменить сам макрос ... – and0r