Excel已定义名称调用失败,openpyxl执行报AttributeError求助
解决AttributeError: 'Worksheet' object has no attribute 'defined_names'问题
嘿,这个问题一眼就能看出来——你找错属性所属的对象啦!defined_names是Workbook(工作簿)对象的专属属性,不是Worksheet(工作表)的,所以你在worksheet实例上调用它才会抛出这个错误。
修正后的代码
直接在加载后的workbook对象上访问defined_names就行:
import openpyxl from openpyxl import load_workbook # 加载目标工作簿 workbook = load_workbook('Saved_Pivots.xlsx') # 从工作簿对象中获取命名区域 w = workbook.defined_names['efd'] print(w)
额外扩展:获取命名区域对应的实际单元格
如果想要进一步操作这个命名区域里的单元格,可以用destinations()方法解析出它对应的工作表和单元格范围:
# 解析命名区域的目标位置 for sheet_name, cell_range in w.destinations: # 定位到对应的工作表 target_worksheet = workbook[sheet_name] # 获取该区域的所有单元格 cell_group = target_worksheet[cell_range] # 示例:打印区域内的单元格值 print(f"工作表「{sheet_name}」中,命名区域「efd」的内容:") for row in cell_group: print([cell.value for cell in row])
为什么之前的代码会报错?
你之前通过workbook.active拿到的worksheet是单个工作表的实例,而Excel的命名区域(无论是工作簿级还是工作表级)都是在工作簿层面管理的,所以必须从workbook对象去访问defined_names属性,才能找到你在WPS里定义的「efd」区域。
内容的提问来源于stack exchange,提问作者Balkar Singh
相关产品推荐
相关产品推荐

