为何Excel Interop的Save()方法无法为Excel文件设置密码?
问题
我正在使用Excel Interop(.NET Framework 4.8.1控制台应用程序)为Excel文件设置密码。仅当使用SaveAs()方法并指定原文件名进行覆盖时,密码设置操作有效;若使用Save()方法,则无法成功为文件设置密码。
可正常运行的代码
using Excel = Microsoft.Office.Interop.Excel; using Microsoft.Office.Interop.Excel; namespace excel { internal class Program { static void Main(string[] args) { ExcelUtil excelUtil = new ExcelUtil(); excelUtil.passwordProtectExcel(); } } } class ExcelUtil { public string Filename = "C:\\websites\\excel_encrypt\\files\\file_to_encrypt.xlsx"; private Excel.Application excelApp; private Excel.Workbook wb; public void passwordProtectExcel() { Excel.Application excelApp = new Excel.Application(); Workbook wb = excelApp.Workbooks.Open(Filename); excelApp.Visible = true; excelApp.DisplayAlerts = false; // 阻止Excel询问是否覆盖现有文件或保存更改 string password = "some_password"; wb.WritePassword = password; wb.SaveAs(Filename); wb.Close(); wb = null; excelApp.Quit(); excelApp = null; } }
无效果的代码
using Excel = Microsoft.Office.Interop.Excel; using Microsoft.Office.Interop.Excel; namespace excel { internal class Program { static void Main(string[] args) { ExcelUtil excelUtil = new ExcelUtil(); excelUtil.passwordProtectExcel(); } } } class ExcelUtil { public string Filename = "C:\\websites\\excel_encrypt\\files\\file_to_encrypt.xlsx"; private Excel.Application excelApp; private Excel.Workbook wb; public void passwordProtectExcel() { Excel.Application excelApp = new Excel.Application(); Workbook wb = excelApp.Workbooks.Open(Filename); excelApp.Visible = true; excelApp.DisplayAlerts = false; // 阻止Excel询问是否覆盖现有文件或保存更改 string password = "some_password"; wb.WritePassword = password; wb.Save(); wb.Close(); wb = null; excelApp.Quit(); excelApp = null; } }
原因分析
这是Excel Interop的设计特性导致的:
Save()方法仅负责保存工作簿的内容变更,不会修改文件的安全属性(包括写入密码)。写入密码属于文件级别的元数据,并非工作簿内容的一部分,Save()不会触发这类属性的更新操作。SaveAs()方法本质是重新创建或覆盖文件的完整流程,会将当前工作簿的所有属性(包括刚设置的WritePassword)一并写入目标文件。即使指定原文件名进行覆盖,也是执行了一次完整的文件生成,因此密码设置会生效。
简言之,密码这类文件级别的安全设置,必须通过SaveAs()才能持久化到文件中,Save()仅处理内容修改,不涉及这类属性变更。
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

