Как определить, не содержит ли лист Excel никаких значений, используя openpyxl? - PullRequest
0 голосов
/ 18 января 2019

Я пишу скрипт Python 3.7.2 для проверки наличия неиспользуемых листов в файле Excel, и мне нужен способ определить, не содержит ли текущий лист значений. Ранее, когда я кодировал в VBA, я обнаружил, что последний использованный ряд и последний использованный столбец проверяли, был ли лист «пустым», но функции max_column и max_row в openpyxl учитывают не имеющие значения данные, такие как форматирование, которое Я хочу игнорировать. Есть ли способ проверить, не содержит ли значения ни одна из ячеек данного листа?

Ранее, когда я кодировал в VBA, я обнаружил, что последний использованный ряд и последний использованный столбец проверяли, был ли лист «пустым», но функции max_column и max_row в openpyxl учитывают не имеющие значения данные как форматирование, которое я хочу игнорировать.

В идеале я бы смог найти способ получить last_used_column и last_used_row, как я это делал в VBA, но я был бы признателен, если бы кто-нибудь мог рассказать мне о любых инструментах, которые я мог бы использовать для создания простой функции, где вы передайте ему лист, и он выдаст True или False в зависимости от того, у него нет значений или нет.

1 Ответ

0 голосов
/ 18 января 2019

В отличие от моего предложения в комментарии, ws.get_cell_collection() устарело, но вы можете перебрать модуль openpyxl.worksheet.worksheet значения свойство, так как (из документов):

значение
Производит все значения ячеек на листе, по строке

Тип: генератор

При рабочей книге workbook.xlsx, содержащей две таблицы, Sheet1 содержит некоторую ячейку со значениями, но Sheet2 явно пуст со всеми пустыми ячейками:

wb = load_workbook('workbook.xlsx')

for name in wb.get_sheet_names():
    isempty = False
    for row in wb.get_sheet_by_name(name).values:
        if all(value == None for value in row):
            isempty = True
        else:
            isempty = False
    if isempty:
        print(name)

выводит пустой лист (ы):

Sheet2

Хотя это работает, это немного сложнее, чем использовать только:

empty_sheets = [name for name in wb.get_sheet_names() if not (wb.get_sheet_by_name(name).get_cell_collection())] 

, который все еще работает, хотя и устарел.

...