使用pd.ExcelWriter写入xlsm文件遇权限及格式错误,求解决方案
解决Pandas写入xlsm文件的两个常见问题
嘿,这两个问题都是用Pandas操作带宏的Excel文件时很容易踩的坑,我来给你拆解解决办法:
1. 文件打开时提示权限被拒绝
这个其实是Windows的文件锁定机制在搞鬼——当Excel打开excelTest.xlsm的时候,会独占这个文件,不允许其他程序修改它。
解决办法很直接:
- 运行代码前务必关闭所有打开这个文件的Excel窗口
- 要是想让代码更贴心,可以加个异常捕获,出错时明确提示用户:
try: with pd.ExcelWriter('excelTest.xlsm', engine='openpyxl', mode='a') as writer: df.to_excel(writer, 'Sheet2', index=False) except PermissionError: print("哎呀,先把打开的excelTest.xlsm关掉再运行代码呀!")
2. 写入后Excel提示格式无效
这个问题的核心是:Pandas默认的Excel写入引擎不兼容.xlsm(带宏的Excel格式),得做两个关键调整:
第一步:安装支持xlsm的引擎
你需要安装openpyxl,它是少数能正确读写带宏Excel文件的库:
pip install openpyxl
第二步:修改代码参数
因为你是往已有的xlsm文件里加Sheet2,不是新建文件,所以要指定两个参数:
engine='openpyxl':告诉Pandas用支持xlsm的引擎mode='a':以追加模式打开文件,保留原有的Sheet1和宏内容
另外,用with语句代替手动调用save()更安全,还能避免资源泄漏。修改后的完整代码:
import os import pandas as pd # 切换到目标目录 os.chdir('C:/pythonTest') # 读取CSV内容 df = pd.read_csv('input.txt') # 写入xlsm文件 with pd.ExcelWriter('excelTest.xlsm', engine='openpyxl', mode='a') as writer: df.to_excel(writer, 'Sheet2', index=False) # index=False去掉默认的行索引,更美观
小提醒:如果你的
excelTest.xlsm是把xlsx重命名来的,先打开它在Excel里另存为真正的.xlsm格式,不然可能还是会出问题。另外xlsxwriter引擎虽然能创建xlsm,但没法保留原有宏,所以优先用openpyxl。
内容的提问来源于stack exchange,提问作者vestland
相关产品推荐
相关产品推荐

