代码之家  ›  专栏  ›  技术社区  ›  xtian

无法让openpyxl删除行

  •  0
  • xtian  · 技术社区  · 7 年前

    我正在使用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 回复  |  直到 7 年前
        1
  •  1
  •   Charlie Clark    7 年前

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

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