迭代工作簿中的工作表 - Python嵌套For循环

时间:2016-09-27 20:23:42

标签: python for-loop openpyxl

我正在尝试打开一个excel工作簿并循环遍历每个工作表。这是第一个循环:

wb = openpyxl.load_workbook('snakes.xlsx')
for i in wb.worksheets: 
    i= 0
    wb.get_sheet_names()
    i = i + 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循环的任何想法,以便代码循环遍历图像并将它们写入工作表?

1 个答案:

答案 0 :(得分: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的值为0,因此没有要使用的工作表。

值得注意的是,从工作簿对象调用get_sheet_names(),因此无需在for循环中调用它:

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

最后,你的第二个“嵌套for循环”(它甚至没有嵌套)是正确的,除了它在每个循环中保存新的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')