You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在xlwings中通过工作表CodeName获取对应工作表对象

xlwings通过工作表CodeName访问对象的实现方法

问题背景

使用xlwings处理Excel时,原生仅支持通过工作表名称、索引两种方式获取工作表对象,但两类属性均存在被修改的风险:

  • 工作表显示名称可直接在Excel端右键重命名
  • 工作表索引会随插入、删除工作表的操作发生偏移
    两类访问方式都无法实现稳定的工作表定位。
    对应VBA使用场景中,可在VBA编辑器内为工作表设置固定的CodeName,例如将报表工作表CodeName设为shReport后,无论用户将工作表显示名改为"Report"还是"NiceReport",都可以直接通过shReport.Cells(1,1)稳定读取单元格内容,不受表名、索引变动影响。
    此前尝试通过api属性读取CodeName时,运行如下代码无任何输出:
for sht in wk.Sheets:  
    print(sht.api.CodeName)

具体实现方案

代码无输出首先排查变量名一致性问题:示例中获取工作表时混用了wb和wk两个工作簿对象变量,会导致逻辑异常。其次不同平台、不同xlwings版本读取CodeName的写法存在差异:

通用简单方案(xlwings 0.25.0及以上版本)

高版本xlwings已经为工作表对象原生新增了跨平台通用的codename属性,无需调用底层api即可直接读取,通过CodeName定位目标表的示例代码:

import xlwings as xw
wb = xw.Book("目标文件路径.xlsx")

# 遍历打印所有工作表的显示名和对应CodeName
for sht in wb.sheets:
    print(f"工作表显示名:{sht.name},固定CodeName:{sht.codename}")

# 定位CodeName为shReport的目标工作表
target_sht = next(sht for sht in wb.sheets if sht.codename == "shReport")
# 读取目标表A1单元格内容
print(target_sht.cells(1, 1).value)

Windows平台低版本兼容写法

Windows端xlwings通过pywin32调用COM接口,可直接通过api属性读取CodeName:

# 读取单个工作表的CodeName
code_name = sht.api.CodeName

macOS平台低版本兼容写法

macOS端xlwings通过appscript对接Excel,读取CodeName需要调用属性接口:

# 读取单个工作表的CodeName
code_name = sht.api.properties().get()['Microsoft Excel Codename']

注意:CodeName是存储在工作簿文件内的固定属性,仅能在VBA编辑器中修改,普通用户在Excel界面的常规操作不会改动该值,适合用来做固定工作表的稳定定位。

内容的提问来源于stack exchange,提问作者wkSpeaker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 03:01:16