2016-07-09 2 views
1

Я работаю с файлом xlsx с помощью openpyxl, но когда я открываю этот файл xlsx в режиме read_only, я могу получить доступ только к первым 10 строкам. Я не вижу этого со всеми xlsx-файлами. Есть ли что-то о данных в файле xlsx, которые будут запускать StopIteration раньше с read_only как True, но не с False? Все данные в электронной таблице (теоретически) равномерны и равнозначны.Python openpyxl: режим только для чтения возвращает другой счетчик строк

Это работает, как ожидалось, для book2, но не для книги1, как показано ниже.

>>> import openpyxl 
>>> a = openpyxl.load_workbook("book1.xlsx", read_only=True) 
>>> a.active.max_row 
10 
>>> a = openpyxl.load_workbook("book1.xlsx", read_only=False) 
>>> a.active.max_row 
20082 

>>> a = openpyxl.load_workbook("book2.xlsx", read_only=True) 
>>> a.active.max_row 
1069 
>>> a = openpyxl.load_workbook("book2.xlsx", read_only=False) 
>>> a.active.max_row 
1069 
+0

Как вы создаете файлы XLSX? Количество строк перепутано в VBA, когда данные/строки были удалены, возможно, это похоже здесь. –

+0

Спасибо за ваш вопрос. Файл xlsx, который не работает, был создан сторонней программой, поэтому я, к сожалению, не контролирую его. Я вообще не манипулировал им. – sunilbeforezod

+0

Похоже, что элемент измерения на листе имеет недопустимые значения. –

ответ

1

установить ws.max_row = ws.max_column = None исправит вашу проблему цитата из документации:

режим только для чтения зависит от приложений и библиотек, которые создали файл предоставляя достоверную информацию о рабочих листах, в частности использованную часть, известная как размеры.

Некоторые приложения задали это неправильно. Вы можете проверить видимые размеры листа, используя ws.calculate_dimension().

Если это возвращает диапазон, который вы знаете, является неправильным, скажем A1:A1 затем просто сброс max_row и max_column атрибутов должны позволить вам работать с файлом:

ws.max_row = ws.max_column = None