加载含宏的.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
相关产品推荐
相关产品推荐

