繁体   English   中英

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

[英]How should I assign each worksheet to its own variable?

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

我该怎么做?

你可能想要这个:

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

为了构造名称ws1ws2 、 ...,我们使用.format()方法将num数字的字符串表示附加到"ws"字符串。

为了(间接)创建具有这些名称的变量,我们将它们作为键添加到vars()字典中。

(内置函数vars()将为您提供所有已使用名称的可更新字典,因此您可以向它们添加新项目。

内置函数enumerate()会给你一些东西作为对列表(1, worksheet1) , (2, worksheet2) ,等等。)

比在for循环中创建新名称更好的是创建名称列表,例如

ws = [sheet.title for sheet in wb1]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM