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

如何通过脚本自动化将带密码的Excel转换为无保护版本?

加密Excel转未加密版本的脚本化实现方案

以下是几种可行的脚本化方案,适用于已知密码的情况下将加密Excel转换为无保护版本,满足流程自动化需求:

方案1:Python + win32com(Windows环境,支持全Excel格式)

依赖本地安装的Excel COM对象,兼容性强,支持.xls和.xlsx格式,处理各种加密场景更稳定。

代码示例

import win32com.client as win32
import os

def unlock_excel(input_path, output_path, password):
    excel = win32.Dispatch("Excel.Application")
    excel.Visible = False  # 后台静默运行
    try:
        # 打开加密文件
        workbook = excel.Workbooks.Open(input_path, Password=password)
        
        # 若需解除工作表保护(如果存在),可添加以下代码
        # for sheet in workbook.Sheets:
        #     if sheet.ProtectContents:
        #         sheet.Unprotect(password)  # 工作表保护密码与文件密码一致时使用,否则替换为对应密码
        
        # 保存为无密码版本,51对应.xlsx,56对应.xls
        workbook.SaveAs(output_path, Password="", FileFormat=51)
        print(f"未加密文件已生成:{output_path}")
    except Exception as e:
        print(f"处理失败:{str(e)}")
    finally:
        workbook.Close()
        excel.Quit()

# 调用示例
input_file = "加密文件.xlsx"
output_file = "未加密文件.xlsx"
file_password = "your_password_here"
unlock_excel(input_file, output_file, file_password)

前置准备

执行pip install pywin32安装依赖库,且本地需安装Microsoft Excel。


方案2:Python + openpyxl(跨平台,仅支持.xlsx)

无需安装Excel,仅支持.xlsx格式,适合轻量场景,对部分复杂加密方式可能不兼容。

代码示例

from openpyxl import load_workbook

def unlock_xlsx(input_path, output_path, password):
    try:
        # 加载加密工作簿
        wb = load_workbook(filename=input_path, read_only=False, password=password)
        
        # 解除工作表保护(若需要)
        # for sheet in wb.worksheets:
        #     if sheet.protection.sheet:
        #         sheet.protection.unprotect(password)
        
        # 保存无密码版本
        wb.save(output_path)
        print(f"未加密文件已保存:{output_path}")
    except Exception as e:
        print(f"处理出错:{str(e)}")

# 调用示例
unlock_xlsx("加密文件.xlsx", "未加密文件.xlsx", "your_password")

前置准备

执行pip install openpyxl安装依赖库。


方案3:PowerShell(Windows原生,无需额外安装语言环境)

利用Windows原生PowerShell调用Excel COM对象,适合无Python环境的Windows自动化场景。

代码示例

$inputPath = "加密文件.xlsx"
$outputPath = "未加密文件.xlsx"
$password = "your_password_here"

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false

try {
    $workbook = $excel.Workbooks.Open($inputPath, $null, $null, $null, $password)
    
    # 解除工作表保护(若需要)
    # foreach ($sheet in $workbook.Sheets) {
    #     if ($sheet.ProtectContents) {
    #         $sheet.Unprotect($password)
    #     }
    # }
    
    # 保存无密码版本,51对应.xlsx,56对应.xls
    $workbook.SaveAs($outputPath, 51, "")
    Write-Host "未加密文件生成成功:$outputPath"
}
catch {
    Write-Host "处理失败:$($_.Exception.Message)"
}
finally {
    $workbook.Close()
    $excel.Quit()
    # 清理COM对象,避免残留进程
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
    [System.GC]::Collect()
    [System.GC]::WaitForPendingFinalizers()
}

使用方式

将代码保存为.ps1文件,在PowerShell中执行即可。


内容的提问来源于stack exchange,提问作者Steve Hibbert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:01:14