批量移除目录中Excel文件本地密码保护的脚本实现需求
批量移除Excel文件密码保护的修复方案
原脚本的核心问题
- 导入语句格式错误:两个
import写在同一行,Python无法识别 - 输入路径语法错误:
C:direcotry\path\etc缺少盘符后的反斜杠,应为C:\directory\path\etc Workbooks.Open和SaveAs参数不规范,容易触发权限或格式兼容错误- 异常分支未处理Excel进程退出,会导致后台残留Excel进程占用资源
- 未处理重复文件名覆盖问题,以及非.xlsx格式的加密Excel文件
修正后的脚本
import os import win32com.client as win32 input_directory = r'C:\directory\path\etc' # 修正路径格式 output_directory = r'C:\Users\Downloads' password = 'your_static_password' # 确保输出目录存在 os.makedirs(output_directory, exist_ok=True) excel_app = None try: # 初始化Excel应用 excel_app = win32.gencache.EnsureDispatch('Excel.Application') excel_app.Visible = False # 隐藏Excel窗口 excel_app.DisplayAlerts = False # 禁用保存/覆盖提示 # 遍历目录下所有Excel文件(支持.xlsx/.xls) for root, _, files in os.walk(input_directory): for filename in files: if filename.lower().endswith(('.xlsx', '.xls')): input_path = os.path.join(root, filename) output_path = os.path.join(output_directory, filename) # 处理重复文件名,避免覆盖 counter = 1 while os.path.exists(output_path): name, ext = os.path.splitext(filename) output_path = os.path.join(output_directory, f"{name}_{counter}{ext}") counter += 1 # 打开加密文件,参数说明:只读=False,格式=51对应xlsx,密码=指定密码 workbook = excel_app.Workbooks.Open( Filename=input_path, ReadOnly=False, Format=51, Password=password ) # 保存为无密码文件,参数明确指定文件格式,取消所有保护相关参数 workbook.SaveAs( Filename=output_path, FileFormat=51, # 51 = .xlsx, 56 = .xls Password='', WriteResPassword='', ReadOnlyRecommended=False, CreateBackup=False ) workbook.Close(SaveChanges=False) print(f"已处理:{filename} -> {output_path}") except Exception as e: print(f"错误信息:{str(e)}") finally: # 确保Excel进程强制退出,避免后台残留 if excel_app: excel_app.Quit() # 释放COM对象 del excel_app
关键修改说明
- 导入语句拆分:将
import os import win32com.client拆分为两行,符合Python语法规范 - 路径修正:修复输入路径的语法错误,使用原始字符串
r''避免转义问题 - 输出目录检查:用
os.makedirs确保输出目录存在,避免路径不存在报错 - 遍历优化:改用
os.walk遍历子目录(如果需要),支持.xlsx和.xls两种格式 - 重复文件处理:自动重命名重复输出文件,防止覆盖已有文件
- 参数明确化:在
Open和SaveAs中明确指定参数名称和取值,避免默认参数导致的错误 - 进程清理:在
finally分支强制退出Excel并释放COM对象,解决后台进程残留问题 - 格式兼容:通过
FileFormat参数指定保存格式,适配不同版本的Excel文件
内容的提问来源于stack exchange,提问作者WildJester
相关产品推荐
相关产品推荐

