首页 > 解决方案 > Python Excel COM 互操作:强制无头模式并阻止用户输入

问题描述

使用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,则由 Python 脚本创建的 Excel 实例变得可见。我怎样才能防止这种情况发生?更糟糕的是,当用户在两个 Excel 实例中的任何一个中执行任何操作(例如单击单元格)时,脚本都会失败:

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

有没有办法强制执行无头模式,特别是防止 GUI 中的用户操作与正在运行的 Python 脚本发生冲突?换句话说,我希望脚本创建的 Excel 实例完全独立于可能正在进行的任何其他 Excel 活动。

标签: pythonexcelwin32com

解决方案


如本答案所述,在实例化 Excel 时问题消失了: https ://stackoverflow.com/a/36711595/4721381


推荐阅读