如何让Pandas读取后缀为xls的Excel XML 2003格式文件?
报错原因
pandas 默认读取.xls文件依赖xlrd库,而xlrd仅支持标准二进制BIFF格式的真实xls文件。你遇到的报错说明当前文件虽后缀为.xls,实际是HTML表格结构(或Excel XML 2003格式),不属于xlrd支持的格式范围,因此触发解析失败。Excel本身兼容性较强,可以自动识别非标准格式的文件内容并正常打开。
直接读取方案(无需提前转换)
你这个报错已经检测到<html前缀,说明文件本质是HTML表格改的后缀,优先用该方案,操作最简单:
- 直接调用pandas的
read_html方法解析即可,示例代码:
import pandas as pd # 直接传入原文件路径,read_html会自动解析文件内的所有表格 table_list = pd.read_html("你的文件路径.xls") # 按需取对应下标的表格即可,默认第一个表格下标为0 df = table_list[0]
转换为标准格式后读取的方案
如果需要统一转成标准xls/xlsx格式再处理,可以根据你的运行环境选对应方案:
Windows环境(已安装Excel)
调用Excel的COM接口完成格式转换:
import win32com.client as win32 excel = win32.gencache.EnsureDispatch('Excel.Application') excel.Visible = False # 打开源文件 workbook = excel.Workbooks.Open(r"你的源文件绝对路径.xls") # 另存为标准xlsx,FileFormat=51对应xlsx,56对应标准xls格式 workbook.SaveAs(r"转换后文件存储路径.xlsx", FileFormat=51) workbook.Close() excel.Quit() # 转换完成后正常读取即可 df = pd.read_excel("转换后文件存储路径.xlsx")
跨平台环境(无需安装Excel)
依赖LibreOffice的命令行能力完成转换,支持Windows、Linux、macOS:
import subprocess # 调用LibreOffice命令行转格式 subprocess.run([ "libreoffice", "--headless", "--convert-to", "xlsx", "你的源文件路径.xls", "--outdir", "转换后文件输出目录" ], check=True)
内容的提问来源于stack exchange,提问作者qwer
相关产品推荐
相关产品推荐

