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。仅从互联网搜索中复制内容并不可取。有几个站点的代码已过时或不必要地复杂。最好参考文档或在邮件列表上询问。