使用Python移除XLSB文件密码时遇只读模式保存错误求助
解决XLSB文件密码移除时的只读保存错误
错误原因
报错提示文件以只读模式打开,无法覆盖保存。这通常是因为原文件被其他进程占用、文件系统权限限制,或是Excel打开加密文件时的隐性锁定机制,导致无法直接覆盖原文件。
修正方案
通过临时文件中转的方式,先保存解密后的文件到临时路径,关闭工作簿后再替换原文件,规避直接覆盖的权限/锁定问题:
import win32com.client import os import shutil file_path = 'M:\\Ejemplo\\Nombre_Archivo.xlsb' temp_file = 'M:\\Ejemplo\\Temp_Nombre_Archivo.xlsb' pw_str = 'Cardif2023' excel = win32com.client.Dispatch('Excel.Application') excel.DisplayAlerts = False excel.Visible = False # 后台运行Excel,避免弹窗干扰 # 打开加密文件,明确禁用只读模式 wb = excel.Workbooks.Open(file_path, ReadOnly=False, Password=pw_str) # 另存为无密码的XLSB文件(FileFormat=50对应xlExcel12格式) wb.SaveAs(temp_file, FileFormat=50, Password='', WriteResPassword='') # 彻底关闭工作簿和Excel进程 wb.Close() excel.Quit() # 替换原文件 os.remove(file_path) shutil.move(temp_file, file_path)
关键调整点
- 临时文件中转:绕开直接覆盖原文件时的只读锁定限制
- 明确指定文件格式:用
FileFormat=50确保保存为XLSB二进制格式,避免格式自动变更 - 清理Excel进程:关闭Excel实例,防止后台进程残留占用文件
- 简化参数写法:使用命名参数提升代码可读性,避免位置参数混淆
额外注意事项
- 确保原文件未被其他程序(如手动打开的Excel窗口)占用
- 运行脚本的用户需拥有目标文件夹的读写权限
- 操作前建议备份原文件,避免意外数据丢失
内容的提问来源于stack exchange,提问作者Kristian Rodríguez
相关产品推荐
相关产品推荐

