load_workbook打开excel失败常见原因:路径错误或文件被占用;不支持.xls格式;默认只读数据导致公式、样式丢失;大文件需用read_only=true优化;中文乱码多因空单元格或合并单元格处理不当。

load_workbook 打开 Excel 文件失败,报 FileNotFoundError
常见原因是路径写错或文件被 Excel 程序占用。Windows 下注意反斜杠要转义或用原始字符串,Mac/Linux 要确认路径大小写和空格。
- 用
r"C:\data\report.xlsx"或"C:/data/report.xlsx"避免转义问题 - 检查文件是否正被 Excel、WPS 或另一段 Python 进程打开(
PermissionError: [Errno 13]就是这个原因) -
load_workbook不支持 .xls 格式,只读 .xlsx/.xlsm/.xltx/.xltm;老格式得换xlrd(仅限旧版)或先转成 xlsx
读取后修改再保存,结果丢失公式或样式
openpyxl 默认以“仅数据”模式加载,公式会变成计算后的值,样式、图表、批注等全丢。这不是 bug,是设计如此——它优先保证结构可编程,不是做 Excel 替代品。
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
- 加参数
keep_vba=True可保留宏(但不能执行),data_only=False才能读到公式本身(默认True,即只读结果) - 样式需显式设置:比如
ws['A1'].font = Font(bold=True),不会自动继承原单元格样式 - 如果只要读数据、不改结构,用
read_only=True能大幅提速且省内存,但此时不能写、不能访问.style或公式
读取大文件卡死或内存爆掉
默认模式会把整个工作簿载入内存,10MB 以上 Excel 就可能吃光 2GB 内存。尤其含大量空行、合并单元格或图像时更明显。
- 优先用
read_only=True+data_only=True组合,配合迭代读取:for row in ws.iter_rows(min_row=1, max_row=1000) - 避免
ws.max_row或ws.max_column—— 它们会触发全表扫描,改用ws.calculate_dimension()更快 - 不要用
ws['A1:C10000']切片取大范围,改用iter_rows()或iter_cols()
中文列名/单元格内容乱码或变成 None
openpyxl 本身不处理编码,它依赖底层 XML 解析器。乱码通常不是库的问题,而是 Excel 文件本身存储异常,或你误读了空单元格、富文本、合并单元格的左上角。
- 空单元格返回
None,不是空字符串,判断前先用cell.value is not None - 合并单元格只有左上角有值,其余位置
cell.value是None;查ws.merged_cells.ranges才能知道哪些区域被合并 - 如果单元格里是富文本(比如部分加粗),
cell.value仍是纯文本,格式信息在cell.rich_text(v3.1+),但支持有限
load_workbook,而是理解它不承诺还原 Excel 的全部表现——它是个结构解析器,不是渲染引擎。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










