from openpyxl import *
#wb1 is the unallocated pupils
wb1 = load_workbook('unallocated.xlsx')
#wb2 will be the final allocations
wb2 = Workbook()
wb2.save("allocations.xlsx")
wb2 = load_workbook('allocations.xlsx')
此后,我需要找到一种方法,使我可以将wb1
中的每个工作表映射到工作表的名称。因此最终产品应类似于ws1 = [工作表1的名称]和ws2 = [工作表2的名称],依此类推。
for sheet in wb1:
sheet.title = wb1[sheet.title]
这不起作用,在其周围加上str
都不会引起类型错误。
Traceback (most recent call last): File "C:/Users/Family guest/Desktop/CEP final project/CEP final proj.py", line 13, in <module> sheet.title = wb1[sheet.title] File "C:\Users\Family guest\AppData\Local\Programs\Python\Python37\lib \site-packages\openpyxl\workbook\child.py", line 93, in title m = INVALID_TITLE_REGEX.search(value) TypeError: expected string or bytes-like object
我应该怎么做?
答案 0 :(得分:0)
您可能想要这样:
for num, sheet in enumerate(wb1, 1):
vars()["ws{}".format(num)] = sheet.title
要构造名称ws1
,ws2
,...,我们使用.format()
方法来附加{{1}的字符串表示形式}号添加到num
字符串中。
要(间接)使用这些名称创建 变量,我们将它们作为键添加到"ws"
字典中。
(内置功能vars()
将为您提供所有使用过的名称的可更新词典,因此您可以向其中添加新项目。
内置函数vars()
将为您提供诸如对enumerate()
,(1, worksheet1)
等对的列表。)
答案 1 :(得分:0)
比在for
循环中创建新名称更好的是创建名称的列表。 g。
ws = [sheet.title for sheet in wb1]
(以及使用索引ws[0]
,ws[1]
等访问它们)。