Excel用win32com打开提示"Name cannot be the same as built-in name",我手动打开不提示

Excel prompts "Name cannot be the same as built-in name" when opened by win32com but not when opened by me manually

我正在尝试使用 python 自动执行某些操作,其中一个步骤是使用“win32com.client”模块打开 .xlsx 文件,然后将几张打印成 PDF。 如果我已经在 Excel 中打开文件,一切正常,但如果 Python 脚本想要打开它,Excel 要求我为“_FilterDatabase”和“ Print_Area",尽管我可以毫无问题地手动打开它。

如果我确实更改了名称,那么我必须重新设置所有打印区域。使用新的打印区域保存文件会导致同样的问题。我不知道为什么用 win32com 打开文件与手动打开文件不同。

这是简单的代码,仅用于打开文件:

import win32com.client

wb_path = r'D:\Users\Agenerick\Documents\Projects\sprawozdania-gen\excel\a.xlsx'
o = win32com.client.Dispatch("Excel.Application")
o.Visible = True
o.Workbooks.Open(wb_path)

我试过使用 ReadOnly 标志和 xlwings,甚至在 Powershell 中使用 ComObject,没有区别,但是,使用子进程打开文件没问题,但是我无法真正隐藏 window。我也没有安装任何其他版本的 Excel。

朋友帮我解决了这个问题,并在德语中发现了一个 post 有类似的错误。我修复它的方法是将 o.Workbooks.Open(wb_path) 替换为 o.Workbooks.OpenXML(wb_path)

显然这是 Excel 的错误。之后我还必须将 wb.Worksheets.Select() (或类似的东西)更改为 wb.Sheets.Select()