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

加载含宏的.xlsm文件触发ValueError: Duplicate Position 0.0错误求助

解决.xlsm文件读取「ValueError: Duplicate Position 0.0」的方案

针对单元格重复格式对象的处理

这个报错大概率是目标单元格(A1)内存在重叠的富文本片段、嵌入对象这类重复格式元素导致的,试试这些方法:

  • 用旧版xlrd读取(xlrd 2.0+不再支持.xlsm,先执行pip install xlrd==1.2.0安装):
import xlrd
wb = xlrd.open_workbook(filePath, formatting_info=False)
sh = wb.sheet_by_name('sheet0')
header = sh.row_values(0)  # 读取表头行
  • 跳过表头直接读数据,后续手动补全表头:
import pandas as pd
df = pd.read_excel(filePath, sheet_name='sheet0', header=None, skiprows=1)
# 替换为实际表头内容
df.columns = ['列名1', '列名2', '列名3']

针对单元格加密/保护的处理

如果是单元格被保护限制读取,尝试以下调整:

  • 给openpyxl添加read_only=True参数:
from openpyxl import load_workbook
wb = load_workbook(filePath, data_only=True, read_only=True)
sh = wb['sheet0']
a1_content = sh['A1'].value
  • 用win32com调用本地Excel读取(需安装Office Excel):
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False
wb = excel.Workbooks.Open(filePath)
sh = wb.Worksheets('sheet0')
header_content = sh.Range('A1').Value
wb.Close()
excel.Quit()

临时应急方法

如果上述方法都失效,可以先将.xlsm文件手动另存为.xlsx(宏会丢失,仅适合只需要数据的场景),再用常规方法读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:42:41