使用openpyxl的Python脚本运行后无输出、不打印工作表名称是什么原因?
问题排查及解决方案
问题背景
Windows 10系统Visual Studio Code中运行openpyxl相关Python脚本,预期读取同目录下socal.xlsx文件并打印工作表名称,无输出无报错,已确认文件与脚本存放在同一目录,运行终端输出如下:
PS C:\Users\kielk\Desktop> & C:/Users/kielk/AppData/Local/Programs/Python/Python310/python.exe c:/Users/kielk/Desktop/atb.py
可能原因及对应解决方法
- Excel文件被独占锁定:若
socal.xlsx此时正通过Excel软件打开,Windows系统会对文件加独占锁,openpyxl加载被锁定文件时可能出现无报错但无有效内容返回的情况,关闭打开的xlsx文件后重新运行脚本即可。 - 文件格式与后缀不匹配:若
socal.xlsx是通过直接修改xls等其他格式文件后缀得到,并非原生Office Open XML格式,openpyxl仅支持原生xlsx/xlsm/xltx/xltm格式,读取非标准xlsx文件时可能无返回。解决方法是用Excel打开文件后另存为标准xlsx格式再运行脚本。 - 终端输出缓冲未即时刷新:部分终端配置下print输出会暂存缓冲区未即时打印到终端,可以在print语句中添加
flush=True参数强制刷新缓冲,调整后代码如下:
import openpyxl as op wb = op.load_workbook('socal.xlsx') print(wb.sheetnames, flush=True)
- 文件包含宏或加密属性:如果xlsx文件带有VBA宏或者设置了只读密码,需要给
load_workbook添加对应参数,带宏的文件需要添加keep_vba=True参数,调整后加载代码为:
wb = op.load_workbook('socal.xlsx', keep_vba=True)
- openpyxl版本兼容缺陷:旧版本openpyxl对部分新版Excel生成的xlsx格式支持存在问题,可以通过升级openpyxl版本解决,执行如下命令:
pip install --upgrade openpyxl
内容的提问来源于stack exchange,提问作者Kris Kiel
相关产品推荐
相关产品推荐

