2016-06-06 3 views
0

У меня есть приложение, в котором я пишу на листе до последнего столбца + 2, если есть уже данные и последний столбец + 1, если рабочий лист пуст. Я получаю то, что я думаю, что это пустая таблица выглядит следующим образом:Определить, является ли рабочий лист пустым в openpyxl

from openpyxl.workbook.workbook import Workbook 
book = Workbook() 
sheet = book.active 

Когда я sheet.max_row и sheet.max_column, я получаю 1 для обоих свойств. Я хотел бы получить ноль, так что я сделать следующее:

if sheet.max_row == 1 and sheet.max_column == 1 and not sheet['A1'].value: 
    start_col = 1 
else: 
    start_col = sheet.max_column + 2 

Имея проверить значение ячейки кажется немного излишним, не говоря уже о подверженной ошибкам. Первоначально я ожидал следующую работу:

if sheet.max_column == 0: 
    start_col = 1 
else: 
    start_col = sheet.max_column + 2 

Есть причина max_row и max_column всегда >= 1? Это ошибка, преднамеренная функция или разумный побочный эффект чего-то еще? Наконец, существует обходное решение (например, что-то вроде sheet.isempty()).

Кстати, я нашел следующий комментарий при просмотре отслеживания ошибок: https://bitbucket.org/openpyxl/openpyxl/issues/514/cell-max_row-reports-higher-than-actual#comment-21091771:

Строки с пустыми ячейками являются еще строкой. Они могут быть отформатированы для будущего использования или другого материала, мы не знаем. 2.3 имеет несколько улучшенную эвристику, но будет содержать строки пустых ячеек.

Этот (и еще один комментарий, на который я больше не могу найти ссылку) заставляет меня поверить, что первая ячейка эффективно существует. В этом случае стоит ли отправлять запрос функции?

ответ

2

Единственный надежный способ определить, является ли рабочий лист «пустым», - это посмотреть на атрибут _cells. Однако это часть внутреннего API и может измениться. На самом деле он почти наверняка изменится.

Атрибуты max_row и max_column используются внутренне для счетчиков и должны быть 1 или более.

Запрос функции без соответствующего кода и тестов будет отклонен, и я скептически отношусь к идее «пустой» рабочей таблицы в целом.

Смежные вопросы