Как мне назначить каждый лист своей переменной? - PullRequest
0 голосов
/ 25 августа 2018
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 голосов
/ 25 августа 2018

Лучше, чем создавать новые имена в цикле for, это создать список имен, например,

ws = [sheet.title for sheet in wb1]

(и получить к ним доступ с индексом: ws[0],ws[1] и т. Д.).

0 голосов
/ 25 августа 2018

Вы, вероятно, хотели это:

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

Чтобы построить имена ws1, ws2, ..., мы используем метод .format(), чтобы добавить строковое представление числа num к строке "ws".

Чтобы (косвенно) создать переменные с этими именами, мы добавим их в качестве ключей в словарь vars().

(Встроенная функция vars() предоставит вам обновляемый словарь для всех используемых имен, чтобы вы могли добавлять к ним новые элементы.

Встроенная функция enumerate() выдаст вам список пар (1, worksheet1), (2, worksheet2) и т. Д.)

...