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

OpenPyXL-按相反顺序遍历行,从ws.max_row到1

  •  -1
  • cssyphus  · 技术社区  · 6 年前

    使用OpenPyXL,我希望删除工作表中的空行,并相信最好的方法是从底部开始 max_row 迭代到顶部。

    我知道要以相反的顺序遍历集合,请使用reversed():

    a = ["foo", "bar", "baz"]
    for i in reversed(a):
        print(i)
    

    但是,我不确定如何将其转换为OpenPyXL行集合。

    reversed()

    for i in range(ws.max_row, 1, -1):
        print(i)
    

    重要提示:我正在识别和删除空行,并想知道这将如何影响在行中向上迭代 ?

    1 回复  |  直到 6 年前
        1
  •  0
  •   cssyphus    6 年前

    好吧,我就是这样做的。尽管作者查理克拉克建议使用 reversed ,我仍然没有确定使用该方法的语法。

    print('BEGIN: sheet.max_row: ' + str(sheet.max_row))
    
    for rr in range(sheet.max_row, 1, -1):
        hasData = False
        for cc in range(1, sheet.max_column+1):
            tmp = AlphaFromIndex(cc)
            ref = str(tmp) + str(rr)
            val = sheet[ref].value
            if val is not None: hasData = True
        if not hasData:
            print('Row: ' + str(rr) + ' -- Deleting row: ' + str(rr))
            sheet.delete_rows(rr, 1)
        else:
            print('Row: ' + str(rr) + ' of (' +str(sheet.max_row)+')')
    
    print('END: sheet.max_row: ' + str(sheet.max_row))
    
    def AlphaFromIndex(num):
        ab = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
        return ab[num - 1]
    

    *但是*

    本练习的主要收获是OpenPyXL不会更新任何已删除行下的行中的公式。所以,在OpenPyXL中删除空白行是个坏主意