我正在尝试打开一个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循环的任何想法,以便代码循环遍历图像并将它们写入工作表?
答案 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')