2016-07-08 8 views
2

私はopenpyxlを使用していて、xlsxワークブックのunmergingセルについては何かのコードを見つけました。ループされていないセルのセルをスキップする

私は動作するコードを得ましたが、1回のパスですべてのマージされたセルを削除していないことがわかりました。私はwhileループを使って実行するように設定し、問題を解決しましたが、まずはスキップするのが間違っているのだろうと思っていました。どんな洞察も役に立つでしょう。

コード:あなたは暗黙のカウンターは、プロパティが再計算されていることを考慮に入れていますので、それを直接forループいずれにも使用されていないことに注意する必要があるので、

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) 
+0

あなたの質問はあまり明確ではありません。 –

+0

while条件なしでforループを実行すると、残っているセルが結合されます。 forループがマージされたすべてのセルを削除しないのはなぜですか? – DataNoob

答えて

2

ws.merged_cell_rangesは変更可能です。これは、によって示され、Pythonで一般的な落とし穴です:

for rng in ws.merged_cell_ranges[:]: # create a copy of the list 
    ws.unmerge(rng) # remove range from original 

PSを:

l = list(range(10)) 
for i in l: 
    print(i) 
    l.pop(0) # anything that affects the structure of the list 

次はこれを回避する方法です。単にインターネット検索からのものをコピーすることは本当にお勧めできません。時代遅れの、または不必要に複雑なコードを持つサイトがいくつかあります。ドキュメントを参照したり、メーリングリストに尋ねたりするのが最適です。

関連する問題