Openpyxl перечисление по ячейкам NoneType - PullRequest
0 голосов
/ 17 июня 2020

Моя цель - открыть электронную таблицу с несоответствующими записями данных и просмотреть их строка за строкой в ​​столбце, чтобы затем обработать информацию. При итерации с a для l oop с range(2, ws.max_row) итерация продолжается после последнего экземпляра данных (ячейка a36) и продолжает повторяться и возвращать None за пределами того места, где я ожидал, что аргумент ws.max_row остановится на ячейке a36.

Это то, что я пробовал:

for cell in range(2, ws.max_row):
   value = ws.cell(row=cell, column=1).value
   print(value)

Вывод отображает значения ячеек, содержащих данные, а затем после ячейки a36 он продолжает выводить пустые ячейки, такие как:

DPS ‐ Hot Springs ‐ 206 S Chicago Street 
None
None
None
None
None

A36 - последняя ячейка, содержащая какие-либо данные, и я подумал, что max_row эквивалентна последней строке, содержащей данные. Кто-нибудь понимает, что могло быть причиной продолжения моего for l oop после этого?

Ответы [ 2 ]

0 голосов
/ 22 июня 2020

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

Есть два способа решить эту проблему.

  1. Установить break в ur l oop, когда cell.value соответствует тому, что вы ожидали.

  2. Проверьте ur excel-файл, если в нем есть ячейки NoneType, которые были неожиданными.

0 голосов
/ 22 июня 2020

Если ваши столбцы полностью заполнены до последней строки (в вашем случае строка 36), почему бы не использовать while l oop и условие разрыва?

Что-то вроде этого:

row = 2
while True:
    value = ws.cell(row=row, column=1).value
    print(value)
    if value == None:
        break
    row += 1

Как указано @stovfl и @ Charl ie Clark, max_row не обязательно является последней строкой в ​​ваших данных, кроме None. Лучше быть откровенным

...