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

使用openpyxl读取Excel至Pandas DataFrame触发ValueError求助

解决xlsx文件读取报错的方案

一、先确保文件下载完整(最可能的原因)

你当前用time.sleep(20)等待下载完成不可靠,Chrome下载大文件时会生成.crdownload临时文件,此时重命名会导致文件损坏。替换为监听下载目录的逻辑:

import os
import time
from glob import glob

# 新增等待下载完成的函数
def wait_for_download(download_dir, filename_pattern):
    while True:
        # 检查是否存在Chrome临时下载文件
        temp_files = glob(os.path.join(download_dir, "*.crdownload"))
        if not temp_files:
            # 检查目标文件是否已生成
            target_files = glob(os.path.join(download_dir, filename_pattern))
            if target_files:
                return target_files[0]
        time.sleep(1)

# 替换原代码中下载后的等待和文件获取部分
# 删掉time.sleep(20)和f = glob(...)这两行,换成:
f = wait_for_download(etf_path, "Fondszusammensetzung_Amundi*")
os.rename(f, os.path.join(etf_path, 'test.xlsx'))

二、更换Excel读取引擎

如果文件本身样式复杂,openpyxl无法解析其XML样式表,尝试更换引擎:

1. 使用xlrd引擎(需安装旧版本)

xlrd 1.2.0版本支持xlsx格式,先安装:

pip install xlrd==1.2.0

修改读取代码:

df = pd.read_excel('./ETF/test/test.xlsx', engine='xlrd', skiprows=18, skipfooter=4, header=1, usecols="B:H")

2. 使用pyxlsb引擎

pyxlsb对复杂xlsx文件兼容性较好,先安装:

pip install pyxlsb

修改读取代码:

df = pd.read_excel('./ETF/test/test.xlsx', engine='pyxlsb', skiprows=18, skipfooter=4, header=1, usecols="B:H")

三、修复文件XML格式(Windows环境)

如果文件确实存在XML无效问题,用Excel自动修复:
先安装pywin32:

pip install pywin32

添加修复代码在读取之前:

import win32com.client as win32

# 用Excel打开并保存文件,自动修复格式
excel = win32.gencache.EnsureDispatch('Excel.Application')
# 后台运行,不显示界面
excel.Visible = False
wb = excel.Workbooks.Open(os.path.abspath('./ETF/test/test.xlsx'))
wb.Save()
wb.Close()
excel.Quit()

# 再读取文件
df = pd.read_excel('./ETF/test/test.xlsx', engine='openpyxl', skiprows=18, skipfooter=4, header=1, usecols="B:H")

四、验证文件实际格式

确认下载的文件是否真的是xlsx格式(可能网站返回xls但后缀标为xlsx):
安装python-magic(Windows用python-magic-bin):

# Windows
pip install python-magic-bin
# Linux/macOS
pip install python-magic

检查文件类型:

import magic
file_type = magic.from_file('./ETF/test/test.xlsx')
print(file_type)

如果输出为Microsoft Excel 97-2003 Worksheet,则用xlrd引擎读取即可。


内容的提问来源于stack exchange,提问作者Economist Learning Python

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:55:03