You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量移除目录中Excel文件本地密码保护的脚本实现需求

批量移除Excel文件密码保护的修复方案

原脚本的核心问题

  1. 导入语句格式错误:两个import写在同一行,Python无法识别
  2. 输入路径语法错误:C:direcotry\path\etc缺少盘符后的反斜杠,应为C:\directory\path\etc
  3. Workbooks.Open和SaveAs参数不规范,容易触发权限或格式兼容错误
  4. 异常分支未处理Excel进程退出,会导致后台残留Excel进程占用资源
  5. 未处理重复文件名覆盖问题,以及非.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 21:44:49