Python openpyxl 包defined_names无法识别命名范围



我有一个现有的工作簿,我需要用openpyxl进行修改。 工作簿包含作为数据透视表源的表。 我已经为Excel中名称管理器中的表分配了名称。 我想在 openpyxl 中访问这些范围以用更新的信息替换数据,但 openpyxl 似乎无法识别现有范围。

我遵循了openpyxl站点文档中的代码,但没有成功。 即使我成功地按照说明创建了一个命名范围(这不是我真正想要做的 - 我想访问现有的命名范围(,新创建的命名范围仅在文件打开时持续存在,并且在保存文件时不会保留。

我已经检查以确保每个命名范围的范围是"工作簿",并且ws._tables[0].name为我提供了正确的表名称,但我还没有成功地弄清楚如何操作其中的数据或确定它包含多少行/列等,以便我可以替换其中的数据。

from openpyxl import load_workbook
wb = load_workbook(args.xlfile)
try:
source_cm = wb.defined_names['tblAcq']
except KeyError as e:
print(e)

我错过了什么?

我没有遇到与您相同的问题。使用 defined_name 模块,我能够在 Excel 工作表中创建、保存和访问命名区域。

import openpyxl
from openpyxl import *
from openpyxl.styles import NamedStyle
wb = load_workbook("document.xlsx")
ws = wb.active
#new_range = openpyxl.workbook.defined_name.DefinedName('newrange', attr_text='Sheet!$B$1:$B$5') 
#wb.defined_names.append(new_range)
print(wb.defined_names.get('newrange'))
wb.save('document.xlsx')

使用新的命名区域保存文档后,我使用print(wb.defined_names.get('newrange'))get()工作簿中的defined_names

输出

<openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='newrange', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=None, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text='Sheet!$B$1:$B$5'

要使用 openpyxl 处理 Excel 表格,请在工作表对象中找到它们,并且不能以只读方式打开。它们不能像其他命名范围一样defined_name中找到。https://openpyxl.readthedocs.io/en/latest/worksheet_tables.html

from openpyxl import load_workbook
wb = load_workbook(args.xlfile, read_only=False)
ws = wb['my_sheet_name']
source_cm = ws.tables['tblAcq']

查看工作表中的所有表名称:ws.tables.items()

最新更新