openpyxl加载xlsm文件报NumericAxis错误,如何仅加载指定无图表工作表
解决方案
该报错是openpyxl解析非标准格式图表轴时触发的已知问题,只要规避图表解析流程即可解决,可选方案如下:
- 方案1:关闭图表加载功能(最便捷)
openpyxl加载文件时默认会解析所有工作表内的图表对象,如果你不需要使用图表相关功能,直接添加keep_charts=False参数即可跳过所有图表的解析流程,完全避免该类型错误,修改后的代码如下:
import openpyxl wb = openpyxl.load_workbook('test.xlsm', data_only=True, keep_charts=False) sheets = wb.sheetnames x = wb[sheets[0]]
- 方案2:仅加载指定工作表(符合规避全量加载的需求)
3.0.7及以上版本的openpyxl支持通过sheet_name参数指定需要加载的工作表,其余工作表不会被解析,自然不会触发其他工作表内图表的报错,示例代码如下:
import openpyxl # 仅加载索引为0的第一个工作表,也可传入工作表名称字符串指定加载 wb = openpyxl.load_workbook('test.xlsm', data_only=True, sheet_name=0) # 仅加载了一个工作表,直接取active即可 x = wb.active
如果运行报错说明你的openpyxl版本过低,执行命令pip install -U openpyxl升级到最新版本即可。
- 方案3:换用其他库适配场景
如果以上方案都不生效,可以根据你的使用场景更换处理库:- 仅需要读取单元格数据:使用pandas的
read_excel方法指定对应sheet即可,不会解析无关内容,示例代码:
import pandas as pd df = pd.read_excel('test.xlsm', sheet_name=0, engine='openpyxl')- 需要读写Excel且运行环境安装了Office客户端:使用pywin32(Windows)或appscript(macOS)调用本地Excel程序操作,完全兼容所有xlsm格式特性,Windows下示例代码:
import win32com.client as win32 excel = win32.gencache.EnsureDispatch('Excel.Application') excel.Visible = False wb = excel.Workbooks.Open(r'文件的绝对路径\test.xlsm') x = wb.Sheets(1) # 后续处理逻辑 wb.Close(SaveChanges=False) excel.Quit() - 仅需要读取单元格数据:使用pandas的
内容的提问来源于stack exchange,提问作者RandallCloud
相关产品推荐
相关产品推荐

