如何使用pandas读取Excel的已定义名称(defined name)单元格值?
如何用Pandas获取Excel的已定义单元格名称?
Pandas本身没有提供直接读取Excel已定义名称的API,但可以结合轻量的Excel元数据读取工具,既保证大文件读取效率,又能拿到目标单元格的定义名称,以下是两种可行方案:
方案一:结合openpyxl读取元数据(无额外环境依赖)
openpyxl可以仅加载工作簿的元数据(包括定义名称),不需要读取全表数据,效率很高,适合大文件场景:
from openpyxl import load_workbook import pandas as pd # 仅加载工作簿元数据,不读取工作表内容 wb = load_workbook('your_file.xlsx', read_only=True, data_only=False) defined_names = wb.defined_names # 查找目标单元格(示例为Sheet1的A1)的定义名称 target_cell = 'Sheet1!A1' cell_name = None for name in defined_names: for sheet, coord in defined_names[name].destinations: if f"{sheet}!{coord}" == target_cell: cell_name = name break if cell_name: break # 用Pandas高效读取数据 df = pd.read_excel('your_file.xlsx') print(f"单元格A1的定义名称:{cell_name}")
方案二:用xlwings调用本地Excel(需Excel环境)
如果你的环境安装了Excel,可以用xlwings直接获取定义名称,逻辑更直观:
import xlwings as xw import pandas as pd # 后台打开工作簿,不显示界面 with xw.Book('your_file.xlsx', visible=False) as wb: cell_name = None for name in wb.names: # 匹配目标工作表和单元格地址 if (name.refers_to_range.sheet.name == 'Sheet1' and name.refers_to_range.address == '$A$1'): cell_name = name.name break df = pd.read_excel('your_file.xlsx') print(f"单元格A1的定义名称:{cell_name}")
说明
- 方案一无需额外依赖Excel环境,仅用openpyxl读取元数据,不会影响Pandas读取大文件的效率;
- 方案二更适合经常和Excel交互的场景,但需要本地安装Excel软件。
内容的提问来源于stack exchange,提问作者Ryderc
相关产品推荐
相关产品推荐

