Создать именованные ячейки на нескольких листах с одинаковым именем openpyxl - PullRequest
0 голосов
/ 09 октября 2018

Я создаю файл Excel с несколькими листами.На каждом листе мне нужно одно и то же определение имени с группой строк и столбцов. Мы можем создать его вручную, но через программу, как этого добиться.

Ниже приведен код:

wb = openpyxl.load_workbook(file.xlsx)
shee1 = wb['sheet1']
shee2 = wb['sheet1']
wb.create_named_range('sales', shee1 , '$B$11:$B$35')
wb.create_named_range('sales', shee2 , '$B$11:$B$35')

ошибка, которую я получаю

Файл "C: \ Users \ 728355 \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ openpyxl \ workbook \ workbook.py", строка 319, в файле create_named_range self.defined_names.append (defn) файл "C: \ Users \ 728355 \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ openpyxl \ workbook \ определенное_имя.py", строка 201, в приложенииповысить ValueError ("" "DefinedName с тем же именем и областью уже существует" "") ValueError: DefinedName с тем же именем и областью уже существует

1 Ответ

0 голосов
/ 09 октября 2018

Я думаю, что названные диапазоны являются глобальными для рабочей книги, а не локальными для каждого листа.На что намекает полученное вами сообщение об ошибке:

DefinedName с таким же именем и областью действия уже существует

Таким образом, вам придется дать эти разные имена

wb = openpyxl.load_workbook(file.xlsx)
sheet1 = wb['sheet1']
sheet2 = wb['sheet2']
wb.create_named_range('sales1', sheet1 , '$B$11:$B$35')
wb.create_named_range('sales2', sheet2 , '$B$11:$B$35')

или более сухое решение:

wb = openpyxl.load_workbook(file.xlsx)
sheets = []
for sheet_no in range(1,3):
    sheets[sheet_no] = wb[f'sheet{sheet_no}'] # note pre python 3.6 you should change f'sheet{sheet_no}' to 'sheet{}'.format(sheet_no)
    wb.create_named_range(f'sales{sheet_no}', sheets[sheet_no], '$B$11:$B$35')
...