使用 openpyxl 读取多个文件

Read multiple files using openpyxl

我有一个包含一些文件名的列表

ListOfFiles = ['filename1.xlsm', 'filename2.xlsm',...]

我想做的是以自动方式加载这些文件。 所以我写了以下内容:

from openpyxl import load_workbook
for i in LisOfFiles:
    xl = load_workbook(ListOfFiles[i], read_only=True)

但是我得到了 TypeError: list indices must be integers or slices, not str 我该如何解决?

尝试在 for 循环中打印 i print(i)。基本上,您正在尝试使用字符串访问列表的元素。在第一次迭代中,这意味着
i = 'filename1.xlsm' 转换为
LisOfFiles['filename1.xlsm']

但是您只能访问带有数字的列表的元素,即 LisOfFiles[0] 可以正常工作。

解决办法是直接用i作为load_workbook的输入。但是请注意,在循环的每次迭代中 xl 都会被覆盖

for i in LisOfFiles: 
    xl = load_workbook(i, read_only= True)

您已经在遍历列表。无需再次索引:

from openpyxl import load_workbook

for path in ListOfFiles:
    xl = load_workbook(path, read_only=True)

编辑

请注意,在上面的代码中,xl 每次都会重新分配。这可能不是你想要的。

您可以捕获列表中的工作簿:

from openpyxl import load_workbook

workbooks = []
for path in ListOfFiles:
    workbooks.append(load_workbook(path, read_only=True))

这可以通过使用列表理解来缩短:

workbooks = [
    load_workbook(path, read_only=True)
    for path in ListOfFiles
]

如果您希望能够通过文件名寻址它们,请使用 字典理解:

workbooks = {
    path: load_workbook(path, read_only=True)
    for path in ListOfFiles
}