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

在Azure函数中运行openpyxl时出现defined_names.definedName属性错误

解决Azure函数中Openpyxl遍历Excel定义名称的错误

1. 修复DefinedNameDict无definedName属性的问题

你代码里直接用wb.defined_names.definedName是踩了Openpyxl内部属性的坑——这不是官方推荐的用法,本地能跑只是环境巧合,跨到Azure就暴露了兼容性问题。wb.defined_names本身是字典类对象,正确遍历方式有两种:

方式一:直接遍历所有定义名称对象

for dn in wb.defined_names.values():
    if dn.name[:3] == 'FD_':
        # 你的业务逻辑代码

方式二:遍历名称与对象的键值对

for name, dn in wb.defined_names.items():
    if name[:3] == 'FD_':
        # 你的业务逻辑代码

2. 解决3.1.1版本中ReadOnlyWorksheet的错误

升级到3.1.1时的报错,是因为你错从工作表对象(worksheet)调用defined_names,但这个属性只属于工作簿对象(wb)。无论是否用只读模式打开文件,都要从工作簿层级获取定义名称:

# 正确示例:从工作簿获取定义名称
wb = load_workbook('你的文件.xlsx', read_only=True)
for dn in wb.defined_names.values():
    # 处理逻辑

3. 环境一致性建议

  • 用requirements.txt锁定Azure函数的依赖版本,和本地保持完全一致:
openpyxl==3.1.0
# 若确认3.1.1适配你的场景,也可指定
# openpyxl==3.1.1
  • 永远只使用Openpyxl官方文档里的公开API,别碰内部私有属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:33:18