【问题标题】:Python - win32com.client: pywintypes.com_error when trying to open a (large) ExcelPython - win32com.client:尝试打开(大)Excel 时出现 pywintypes.com_error
【发布时间】:2019-03-11 12:50:41
【问题描述】:

我正在尝试使用 win32com.client 打开受密码保护的 excel 文件。
该文件有 37 列和 28.140 行。

我需要保持动态的行数,因为将来的文件会有不同的行数(或多或少)。我在 SO 上找到了一个解决方案,到目前为止该解决方案适用于较小的文件。

这是我的代码:

import win32com.client as w3c
xlApp = w3c.Dispatch("Excel.Application")
password = 'Greatpassword'
path = 'filepath'
xlwb = xlApp.Workbooks.Open(path,False, True, None, Password=password)
xlws = xlwb.Sheets[0]


max_clm = 37

xlUp = -4162
max_row = xlws.Cells(xlws.Rows.Count, "A").End(xlUp).Row
print(max_clm, max_row)

data = list(xlws.Range(xlws.Cells(1, 1), xlws.Cells(max_row, max_clm)).Value)


df = pd.DataFrame(data)
df.columns = df.iloc[0]
df = df.drop(0)

xlwb.Close()
xlApp.Quit()

这是我收到的错误消息:

  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\site-packages\win32com\client\dynamic.py", line 516, in __getattr__
ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352566), None)

使用“win32api.FormatMessage(-2147352566)”我得到的文字是:
"Out of present range."

此错误消息是什么意思,我该如何处理?

我重新检查了我的文件以确保它具有行数(变量 max_row)和列数(变量 max_clm)。

print(max_clm, max_row)

给我 37, 28.140

提前致谢!
BR,
MG

【问题讨论】:

    标签: python win32com excel.application


    【解决方案1】:

    显然它不起作用,因为 excel 文件中有很多“空白行”。

    所以我将真正的行复制并粘贴到一个新文件中,然后它突然起作用了。 我无法理解它,因为根据我的代码,max_row 是 28.140。

    有人可以向我解释一下吗?
    win32是否有最大行数限制?

    【讨论】:

    • 我认为如果您尝试通过 GUI 手动执行这些步骤,您会遇到类似的问题。您解决它的方式可能是一个excel“功能”。
    猜你喜欢
    • 2016-11-07
    • 2017-08-13
    • 1970-01-01
    • 2023-04-01
    • 2014-03-11
    • 2020-10-20
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    相关资源
    最近更新 更多