Python Excel COM Interop: включение безголового режима и предотвращение ввода данных пользователем - PullRequest
0 голосов
/ 20 февраля 2019

Использование win32com для взаимодействия с Excel:

import win32com.client
...
self.excel = win32com.client.gencache.EnsureDispatch("Excel.Application")
self.workbook = self.excel.Workbooks.Add()
#Modify the workbook...
self.workbook.SaveAs(...)
self.excel.Quit()

Это хорошо работает и генерирует новый Excel-документ в фоновом режиме (безголовый режим), если ни один экземпляр Excel уже не запущен до того, как скриптзапущен.

Однако, если у пользователя уже был открыт Excel, экземпляр Excel, созданный скриптом Python, становится видимым.Как я могу предотвратить это?Еще хуже, когда пользователь выполняет какое-либо действие (например, щелчок по ячейке) в любом из двух экземпляров Excel, сценарий завершается ошибкой:

(ERROR): pywintypes.com_error: (-2146777998, 'OLE error 0x800ac472', None, None)

Существует ли способ принудительного включения режима без головы и особенно дляпредотвратить пользовательские действия в GUI, чтобы конфликтовать с работающим скриптом Python?Другими словами, я хочу, чтобы экземпляр Excel, созданный сценарием, был полностью независим от любой другой активности Excel, которая может иметь место.

1 Ответ

0 голосов
/ 20 февраля 2019

Проблема исчезла при создании экземпляра Excel, как описано в этом ответе: https://stackoverflow.com/a/36711595/4721381

...