Unmerged Cell For Loop 跳过单元格
Unmerged Cell For Loop skipping cells
我正在使用 openpyxl,并通过 goolging 找到了一些关于在 xlsx 工作簿中取消合并单元格的代码。
我的代码可以正常工作,但发现它并没有一次性删除所有合并的单元格。我使用 while 循环将它设置为 运行 并解决了这个问题,但我想知道我做错了什么导致首先跳过。任何见解都会有所帮助。
代码:
import openpyxl
wb = './filename.xlsx'
ws = wb[sheetname]
def remove_merged(sheet_object):
merged = ws.merged_cell_ranges
while len(merged)>0:
for mergedRNG in merged:
ws.unmerge_cells(range_string = mergedRNG)
merged = ws.merged_cell_ranges
return len(merged)
remove_merged(ws)
ws.merged_cell_ranges
是可变的,因此您需要注意不要在任何 for 循环中直接使用它,因为隐式计数器不会考虑 属性 已被重新计算.这是 Python 中的一个常见问题,说明如下:
l = list(range(10))
for i in l:
print(i)
l.pop(0) # anything that affects the structure of the list
以下是避免这种情况的方法:
for rng in ws.merged_cell_ranges[:]: # create a copy of the list
ws.unmerge(rng) # remove range from original
PS。仅从互联网搜索中复制内容并不可取。有几个站点的代码已过时或不必要地复杂。最好参考文档或在邮件列表上询问。
我正在使用 openpyxl,并通过 goolging 找到了一些关于在 xlsx 工作簿中取消合并单元格的代码。
我的代码可以正常工作,但发现它并没有一次性删除所有合并的单元格。我使用 while 循环将它设置为 运行 并解决了这个问题,但我想知道我做错了什么导致首先跳过。任何见解都会有所帮助。
代码:
import openpyxl
wb = './filename.xlsx'
ws = wb[sheetname]
def remove_merged(sheet_object):
merged = ws.merged_cell_ranges
while len(merged)>0:
for mergedRNG in merged:
ws.unmerge_cells(range_string = mergedRNG)
merged = ws.merged_cell_ranges
return len(merged)
remove_merged(ws)
ws.merged_cell_ranges
是可变的,因此您需要注意不要在任何 for 循环中直接使用它,因为隐式计数器不会考虑 属性 已被重新计算.这是 Python 中的一个常见问题,说明如下:
l = list(range(10))
for i in l:
print(i)
l.pop(0) # anything that affects the structure of the list
以下是避免这种情况的方法:
for rng in ws.merged_cell_ranges[:]: # create a copy of the list
ws.unmerge(rng) # remove range from original
PS。仅从互联网搜索中复制内容并不可取。有几个站点的代码已过时或不必要地复杂。最好参考文档或在邮件列表上询问。