如何用SSIS和C#移除Excel工作簿密码?现有代码无效
解决Interop移除Excel密码并保存无密码文件的问题
你的代码存在几个关键问题,导致无法成功移除密码:
- 路径字符串未正确转义:C#中
\是转义字符,直接书写会引发语法错误,需用@前缀或转义为\\ Unprotect仅解除工作簿的结构/窗口保护,无法移除打开密码- 保存无密码文件必须在
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
相关产品推荐
相关产品推荐

