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

使用openpyxl/Pandas读取Excel文件报错无效XML,求解决方案

使用openpyxl读取Excel 2016文件时遇到XML无效错误

我用Python的openpyxl库读取Excel 2016文件,代码如下:

import openpyxl

input_file = openpyxl.load_workboork(r"C:\Something...\input.xlsx", data_only=True)
input_sheet = input_file["Sheet01"]

设置data_only=True是为了读取Excel中的日期时间格式及标准格式,但运行代码后出现如下错误:

Traceback (most recent call last):
File "C:\Something...\main.py", line 2, in <module> input_file = openpyxl.load_workboork(r"C:\Something...\input.xlsx", data_only=True)
File "C:\Something...\venv\lib\site-packages\openpyxl\reader\excel.py", line 346, in load_workbook
reader.read()
File "C:\Something...\venv\lib\site-packages\openpyxl\reader\excel.py", line 307, in read
raise ValueError(ValueError: Unable to read workbook: could not read worksheets from C:\Something...\input.xlsx
This is most probably because the workbook source files contain some invalid XML.

已尝试以下操作:

  • 确认openpyxl库为最新版本;
  • 移除文件中所有过滤器及多余格式;
  • 打开并修复文件后重新保存;
  • 文件规模约2800行、52列,仅使用文本、数字、日期时间等标准格式;
  • 使用Pandas读取该文件时也出现类似错误。

推测问题出在文件或库,但Pandas也无法读取,目前毫无头绪,因隐私无法提供文件,恳请帮助。


解决建议

  1. 修正代码拼写错误
    你的代码中load_workboork是拼写错误,正确应为load_workbook,先修正这个低级错误后重试。

  2. 转换文件格式
    .xlsx是基于XML的压缩格式,可能存在隐藏损坏。尝试:

    • 将文件另存为Excel二进制工作簿(.xlsb),再用对应方式读取:
      # openpyxl读取xlsb
      from openpyxl import load_workbook
      wb = load_workbook("input.xlsb", data_only=True, read_only=True)
      # pandas读取xlsb(需先安装pyxlsb:pip install pyxlsb)
      import pandas as pd
      df = pd.read_excel("input.xlsb", engine="pyxlsb")
      
    • 直接将工作表导出为CSV格式,用pandas读取:
      df = pd.read_csv("input.csv", parse_dates=True)
      
  3. 清理文件内容
    即使是标准格式,也可能存在特殊字符导致XML解析失败:

    • 全选工作表内容,右键选择选择性粘贴->值,复制到新的空白Excel文件中保存后重试;
    • 使用Excel的"查找和替换"功能,清除非打印字符(查找内容输入^,替换为空)。
  4. 换用其他读取库

    • 用xlrd(仅支持.xls,需安装旧版本:pip install xlrd==1.2.0):
      import xlrd
      wb = xlrd.open_workbook(r"C:\Something...\input.xlsx")
      sheet = wb.sheet_by_name("Sheet01")
      
    • 用win32com.client(Windows环境可用,直接调用Excel应用):
      import win32com.client
      excel = win32com.client.Dispatch("Excel.Application")
      wb = excel.Workbooks.Open(r"C:\Something...\input.xlsx")
      ws = wb.Worksheets("Sheet01")
      # 示例:获取A1单元格值
      print(ws.Cells(1,1).Value)
      wb.Close()
      excel.Quit()
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:53:17