OpenPyXL - 以相反的顺序遍历行,从 ws.max_row 到 1
OpenPyXL - Iterate over rows in reverse order, from ws.max_row to 1
使用 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)
重要说明:我正在识别和删除空行,想知道这将如何影响遍历行 collection ?
好的,这就是我的做法。尽管作者 Charlie Clark 建议使用 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 中不是一个好主意 因为任何预先存在的公式现在都将引用错误的行。
rows = list(sheet.iter_rows(min_row=1, max_row=sheet.max_row)
if needReversed:
rows = reversed(rows)
for row in rows:
print(row[0].value)
使用 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)
重要说明:我正在识别和删除空行,想知道这将如何影响遍历行 collection ?
好的,这就是我的做法。尽管作者 Charlie Clark 建议使用 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 中不是一个好主意 因为任何预先存在的公式现在都将引用错误的行。
rows = list(sheet.iter_rows(min_row=1, max_row=sheet.max_row)
if needReversed:
rows = reversed(rows)
for row in rows:
print(row[0].value)