无法让OpenPyXl删除行

时间:2018-11-19 14:20:52

标签: python openpyxl

我正在使用Python和OpenPyXL合并两个Excel报告。 如果报表中的一行全为零,则应删除该行。

删除行的命令看起来很简单,但是根本行不通。 Another post建议删除行不能与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 :(得分:1)

因为要从工作表的顶部删除行,所以您在进行行索引调整。这意味着,一旦删除了单行,则要删除的所有其他行的索引都是错误的。为了避免这种情况,您应该始终删除工作表底部的行。

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