如何将每个工作表分配给它自己的变量?

时间:2018-08-25 11:18:13

标签: python excel openpyxl

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

我应该怎么做?

2 个答案:

答案 0 :(得分:0)

您可能想要这样:

for num, sheet in enumerate(wb1, 1):
    vars()["ws{}".format(num)] = sheet.title

构造名称ws1ws2,...,我们使用.format()方法来附加{{1}的字符串表示形式}号添加到num字符串中。

要(间接)使用这些名称创建 变量,我们将它们作为键添加到"ws"字典中。

(内置功能vars()将为您提供所有使用过的名称的可更新词典,因此您可以向其中添加新项目。

内置函数vars()将为您提供诸如对enumerate()(1, worksheet1)等对的列表。)

答案 1 :(得分:0)

比在for循环中创建新名称更好的是创建名称的列表。 g。

ws = [sheet.title for sheet in wb1]

(以及使用索引ws[0]ws[1]等访问它们)。