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

如何用SSIS和C#移除Excel工作簿密码?现有代码无效

解决Interop移除Excel密码并保存无密码文件的问题

你的代码存在几个关键问题,导致无法成功移除密码:

  1. 路径字符串未正确转义:C#中\是转义字符,直接书写会引发语法错误,需用@前缀或转义为\\
  2. Unprotect仅解除工作簿的结构/窗口保护,无法移除打开密码
  3. 保存无密码文件必须在SaveAs时显式将Password参数设为空字符串

修改后的可运行代码如下:

public void Main()
{
    // 用@前缀避免路径转义问题
    string sourceFile = @"D:\Data\FX File\ZZ_All_Files\Input\SSIS Test PWD.xlsx";
    string destFile = @"D:\Data\FX File\ZZ_All_Files\Output\SSIS Test NoPWD.xlsx";
    
    Application xlApp = new Application();
    // 打开带密码的目标文件
    Workbook wb = xlApp.Workbooks.Open(sourceFile, Password: "ssistest");
    
    // 若工作簿有结构/窗口保护,先解除(不需要可删除这段)
    if (wb.ProtectStructure || wb.ProtectWindows)
    {
        wb.Unprotect("ssistest");
    }
    
    // 另存为无密码文件,核心是设置Password为空
    wb.SaveAs(
        Filename: destFile,
        Password: "",
        FileFormat: XlFileFormat.xlOpenXMLWorkbook // 对应xlsx格式,xls请改用xlExcel8
    );
    
    // 清理资源,避免Excel进程后台残留
    wb.Close();
    xlApp.Quit();
    
    System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
    
    Dts.TaskResult = (int)ScriptResults.Success;
}

重点说明:

  • 路径必须用@前缀或转义\,否则会触发编译错误
  • 只有在SaveAs时显式设置Password为空,才能彻底移除打开密码,直接Save只会覆盖原文件但保留密码
  • 手动释放COM对象可避免SSIS运行后Excel进程后台残留,减少资源占用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:07:05