如何用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
相关产品推荐
相关产品推荐

