Не удается получить OpenPyXl для удаления строк - PullRequest
0 голосов
/ 19 ноября 2018

Я использую Python и OpenPyXL для объединения двух отчетов Excel. Когда в отчете есть строка со всеми нулевыми значениями, эту строку следует удалить.

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

Я обрабатываю файлы Excel, открывая и сохраняя группы действий. Вот версия кода для комментария к коду, где я удаляю эти строки.

# Get WB
# Get WS
i = 0
del_rows = []
for row in ws.iter_rows():
    i += 1
    if row[0].value is None:
        # INVALID DATA ROW - BLANK ROW
    else:
        rowcellvals = []
        j = 0
        for cell in row:
            j += 1
            if cell.value == row[0].value:
                # INVALID COLUMN VAL - SKIP ACC NAME COL
                continue
            elif cell.value is None:
                # SKIP TITLE ROWS
                break
            else:
                # VALID DATA ROW
                if j % 2 == 0:
                    rowcellvals.append(cell.value)

        if not rowcellvals:
            continue
        else:
            if sum(rowcellvals) == 0:
                del_rows.append(i)

for r in del_rows:
       ws.delete_rows(r, 1)

# SAVE

Есть идеи, почему удаление строк не удаляет?

1 Ответ

0 голосов
/ 20 ноября 2018

Поскольку вы удаляете строки в верхней части рабочего листа, вы корректируете индексы строк по ходу работы. Это означает, что как только вы удалили одну строку, индексы для всех остальных строк, которые вы хотите удалить, становятся неверными. Чтобы избежать этого, вы всегда должны удалять строки в нижней части листа.

for r in reversed(del_rows):
    ws.delete_rows(r)

...