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

如何用Power Automate自动解除受密码保护的Excel文件

自动解除Excel密码保护的Power Automate实现方案

Power Automate本身没有原生的解除Excel密码保护动作,但可以通过Office Scripts实现这个需求,以下是具体操作步骤:

步骤1:编写Office Script解除保护脚本

打开Excel网页版,新建空白工作簿,点击顶部「自动化」选项卡,选择「新建脚本」,将默认代码替换为以下TypeScript脚本:

function main(workbook: ExcelScript.Workbook, password: string) {
  // 尝试解除工作簿结构保护(若模板设置过)
  try {
    workbook.unprotect(password);
  } catch (err) {
    console.log("工作簿未设置结构保护,跳过此操作");
  }
  // 遍历所有工作表,逐一解除保护
  workbook.getWorksheets().forEach(sheet => {
    try {
      sheet.unprotect(password);
    } catch (err) {
      console.log(`工作表「${sheet.getName()}」未设置保护,跳过`);
    }
  });
  return "保护已成功解除";
}

保存脚本,命名为「UnprotectExcel」。

步骤2:在Power Automate流中集成脚本

在现有流的「重命名工作表」步骤之后、「移动文件」步骤之前,添加「Excel Online (Business)」的「运行脚本」动作,按以下配置:

  • 位置:选择上传文件所在的OneDrive或SharePoint站点
  • 文档库:对应文件所在的库
  • 文件:选择Forms上传后的目标Excel文件
  • 脚本:选择刚才创建的「UnprotectExcel」
  • 参数栏输入密码(强烈建议用Power Automate变量或Azure密钥保管库存储密码,避免明文暴露)

特殊情况处理

如果模板设置的是文件打开密码(而非工作表/工作簿结构保护),Office Scripts无法直接处理(脚本需先打开文件才能运行)。这种情况可结合PowerShell脚本与Power Automate的「运行PowerShell脚本」动作(需配置本地网关或云端虚拟机),示例代码如下:

$excelPath = "目标文件路径"
$password = "你的密码"
$newPath = "解除保护后的文件路径"

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$workbook = $excel.Workbooks.Open($excelPath, $null, $null, $null, $password)
$workbook.SaveAs($newPath, [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbook)

$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()

注意事项

  • 确保账号拥有Excel Online的脚本运行权限,以及文件所在库的编辑权限
  • 测试时先用测试文件验证逻辑,避免影响正式数据

内容的提问来源于stack exchange,提问作者John Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:23:13