2016-09-27 10 views
1

Excelワークブックを開き、ループ内の各ワークシートを反復しようとしています。ここで最初のループは次のとおりです。ブック内のワークシートを反復する - PythonネストされたForループ

wb = openpyxl.load_workbook('snakes.xlsx') 
for i in wb.worksheets: 
    i= 0 
    wb.get_sheet_names() 
    i = i + 1 

私は成功したが、これらのワークシートの各1を通過することができたら、私は私のPNGファイルのそれぞれを取り、ワークシートに配置し、ネストされたループをやりたいです。シート名とpngファイルはcountry_namesという名前のデータフレームに同じ名前(国名)が格納されていることに注意することが重要です。

第二のループ:

for ws in wb.worksheets: 
    img = openpyxl.drawing.image.Image(folder + str(var) + '.png') 
    ws.add_image(img, 'K1') 
    wb.save('snakes.xlsx') 

コードは画像をループし、ワークシートに書き込むように、forループの入れ子になったを行う方法上の任意のアイデアは?

+0

は、なぜあなたはここに、ネストされたループをしたいwoud:

以下は実施例すべきですか?あなたは1つのforループで2つのことを行うことができます。あなたはおそらく 'name 'という国名のリストを持っているので、' enumerate(wb.worksheets) 'を使い、' names [i] 'で画像を開くことができます。または、あなたがそれをもっとpythonicにしたい場合は、それらを圧縮します。また、最初のループでは、イテレータとして 'i'を使い、ループの中で' i'を再割り当てします。 –

答えて

1

コードスニペットは、forループがPythonでどのように動作するかについての基本的な誤解を示しているようです。各シートをループし

は、あなたが正しい軌道に乗っていた:

wb = openpyxl.load_workbook('test.xlsx') 
for sheet in wb.worksheets: 
    # do stuff with "sheet" 
    pass 

forループ(私の例ではsheet、あなたの中i)内の変数は、リスト(wb.worksheets)のメンバーであります:整数インデックスではありません。あなたの例では、すべてのループの中でiの値をにすぐに上書きします。したがって、作業するシートはありません。

また、ブックオブジェクトから呼び出されるので、forループの中にそれをコールする必要はありませんされget_sheet_names()注目に値する:

>>> wb.worksheets 
[<Worksheet "Sheet1">, <Worksheet "Sheet2">, <Worksheet "Sheet3">] 

最後に、2番目の「ループの入れ子になった」(「にISNましたtはネストされています)、新しいExcelファイルをループごとに保存することを除いて、無駄です。

ワークシート名がPNG名と同じであることを示しているので、画像を見つけるときにワークシートの属性titleを呼び出すことができます。

wb = openpyxl.load_workbook('snakes.xlsx') 
for ws in wb.worksheets: 
    img = openpyxl.drawing.image.Image(ws.title + '.png') 
    ws.add_image(img, 'K1') 
wb.save('new.xlsx') 
+0

本当にありがとうございました!申し訳ありません。私はPythonにはかなり新しいです。私は次のコードを使用しています:wb.worksheetsのwsのためのwb = openpyxl.load_workbook( 'snakes.xlsx') : img = openpyxl.drawing.image.Image(ws.title + '.png') ws。 「IOError:[Errno 2] No such file or directory:u'sheet1.png」というエラーメッセージが表示されます。ワークシートのタイトルの前にauが表示されますか?pngファイルはシート1です。 – spacedinosaur10

+0

@ spacedinosaur10さらに質問がある場合はお知らせください。 – brianpck

+0

私の辞書を追加しようとしました+ pngは次のようになります:img = openpyxl.drawing.image.Image(country + '.png')しかし、次のような別のエラーが出ました:TypeError:サポートされていないオペランドの型が+: 'dict'と 'str'です。今日は幸せなpythonではありません – spacedinosaur10

関連する問題