Python - win32com.client: pywintypes.com_error при попытке открыть (большой) Excel - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь использовать win32com.client для открытия защищенного паролем файла Excelfile.
Файл содержит 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

1 Ответ

0 голосов
/ 11 марта 2019

Так что, очевидно, это не сработало, потому что в файле Excel было много «пустых строк».

Итак, я скопировал и вставил реальные строки в новый файл, и внезапно это сработало.Я не могу понять это, так как max_row согласно моему коду было 28.140.

Может кто-нибудь объяснить мне это?
Максимально допустимое количество строк для win32?

...