pandas使用read_excel读取Excel文件时报错:文件不是可识别的Excel文件
ValueError: File is not a recognized excel file错误排查方案 验证下载文件完整性
手动打开input目录下的目标Excel文件,确认是否能正常访问,是否提示文件损坏。你可以用文本编辑器打开体积偏小的报错文件,如果文件开头是<!DOCTYPE html>等HTML标识,说明批量下载环节出错,实际拿到的是SharePoint的权限验证页、跳转页的HTML内容,只是后缀被强行设置为Excel格式,需要先修复download_all_files的下载逻辑,确保请求时带上正确的SharePoint鉴权信息,拿到真实的Excel文件流。显式指定解析引擎
不同Excel格式对应的解析引擎不同,高版本xlrd不再支持.xlsx格式,仅支持.xls格式,.xlsx格式需要依赖openpyxl解析。你可以在调用read_excel时显式指定引擎,对应修改代码为:# 读取.xlsx格式文件 df_archivo = pd.read_excel(relative_file_path, engine='openpyxl') # 读取老版本.xls格式文件 # df_archivo = pd.read_excel(relative_file_path, engine='xlrd')过滤非法文件
检查lista_archivos列表内是否包含非Excel文件,比如SharePoint生成的临时文件(开头带~$前缀)、隐藏文件、子目录路径,你可以在循环读取前加一层过滤逻辑,仅处理合法后缀的Excel文件:valid_suffix = ('.xlsx', '.xls', '.xlsm') if archivo.startswith('~$') or not archivo.endswith(valid_suffix): continue验证文件读取权限与写入状态
部分情况下download_all_files执行完成后,文件句柄还未被下载逻辑释放,立刻读取会拿到不完整的文件内容。你可以在下载完成后加1-2秒的延迟,或者读取前先校验文件大小:import os # 小于1KB的文件大概率为无效文件 if os.path.getsize(local_path) < 1024: print(f"无效文件:{local_path}") continue升级依赖包
把pandas、openpyxl、xlrd等相关依赖升级到最新稳定版,旧版本的解析库对部分带特殊格式、特殊编码的Excel文件兼容性较差,升级后即可解决大部分解析异常问题。
内容的提问来源于stack exchange,提问作者B. Guerrero

