我正在创建具有多个工作表的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 \ defined_name.py”, 附录中的第201行 引发ValueError(“”“具有相同名称和范围的DefinedName已经存在”“”)ValueError:具有相同名称和范围的DefinedName 范围已经存在
答案 0 :(得分:1)
我认为命名范围是工作簿的全局范围,而不是每个工作表的局部范围。您收到的错误消息提示:
具有相同名称和范围的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')