如何用C#为Excel文件设置打开密码以进行保护?
如何用C#为Excel文件设置打开密码(无密码无法查看)
当然可以用C#实现Excel文件的打开密码保护,2009年的方案失效大概率是因为依赖库版本过时、Excel格式兼容问题导致的。以下是适配.NET 6+的几种可行方案:
方案1:使用EPPlus(推荐,无COM依赖)
EPPlus是处理.xlsx/.xlsm格式文件的主流库,支持设置打开密码。注意EPPlus 5+版本需要商业授权,若需免费使用可选择4.x版本(MIT许可)。
安装包
针对.NET 6:
- EPPlus 4.x:
Install-Package EPPlus -Version 4.5.3.3 - EPPlus 5+:
Install-Package EPPlus -Version 5.8.1(需配置授权类型)
代码示例
using OfficeOpenXml; using System.IO; // 仅EPPlus 5+版本需要设置许可证上下文 ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 商业场景请改为LicenseContext.Commercial // 加载现有文件或创建新文件 using (var package = new ExcelPackage(new FileInfo("ProtectedExcel.xlsx"))) { // 设置打开密码(无密码无法打开文件) package.Encryption.Password = "YourStrongPassword123!"; // 可选:设置修改密码(知道密码才可编辑) // package.Encryption.ModifyPassword = "EditPassword456!"; // 保存加密后的文件 package.Save(); }
方案2:使用NPOI(支持.xls和.xlsx,开源免费)
NPOI同时支持旧版.xls(BIFF格式)和新版.xlsx(OOXML格式)的密码保护,完全开源免费,适合所有.NET版本。
安装包
Install-Package NPOI -Version 2.6.0
代码示例
处理.xlsx文件
using NPOI.XSSF.UserModel; using NPOI.SS.UserModel; using System.IO; using (var fs = new FileStream("ProtectedXlsx.xlsx", FileMode.Create, FileAccess.Write)) { var workbook = new XSSFWorkbook(); var sheet = workbook.CreateSheet("Sheet1"); // 设置打开密码 ((XSSFWorkbook)workbook).SetPassword("YourSecurePassword!"); // 写入示例内容 sheet.CreateRow(0).CreateCell(0).SetCellValue("Encrypted Content"); workbook.Write(fs); }
处理.xls文件
using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.IO; using (var fs = new FileStream("ProtectedXls.xls", FileMode.Create, FileAccess.Write)) { var workbook = new HSSFWorkbook(); var sheet = workbook.CreateSheet("Sheet1"); // 设置打开密码 ((HSSFWorkbook)workbook).SetPassword("YourSecurePassword!"); sheet.CreateRow(0).CreateCell(0).SetCellValue("Encrypted Content"); workbook.Write(fs); }
方案3:使用Microsoft.Office.Interop.Excel(依赖本地Office)
如果你的环境已安装Microsoft Office,可使用Interop库实现,但不推荐服务器环境使用(依赖Office COM组件,稳定性差、资源占用高)。
安装包
Install-Package Microsoft.Office.Interop.Excel -Version 15.0.4795.1000
代码示例
using Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; var excelApp = new Application(); var workbook = excelApp.Workbooks.Add(); var sheet = workbook.ActiveSheet; // 写入示例内容 sheet.Cells[1, 1] = "Encrypted via Interop"; // 设置打开密码 workbook.Password = "YourStrongPassword!"; // 保存加密文件 workbook.SaveAs("ProtectedInterop.xlsx", Password: "YourStrongPassword!"); // 清理COM资源(必须执行,否则Excel进程会残留) workbook.Close(); excelApp.Quit(); Marshal.ReleaseComObject(sheet); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(excelApp);
旧方案失效原因
2009年的方案通常依赖旧版本的EPPlus、NPOI或Interop库,这些库的API在后续迭代中发生了变化:比如EPPlus 5+新增了许可证机制,NPOI的密码设置方法进行了重构,Interop库的参数定义也有调整,导致旧代码无法直接运行。
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

