如何使用NPOI在.NET 4.7环境下为xlsx Excel设置打开密码
NPOI为XLSX文件设置打开权限密码解决方案
NPOI原生支持XLSX格式的文件级打开密码加密,无需依赖Java环境,完全适配.NET 4.7 + Windows 10运行环境,核心依赖EncryptionInfo和Encryptor类实现,具体实现如下:
前置依赖
- 项目需引用NPOI版本 ≥ 2.5.0,可直接通过NuGet安装对应版本包
- 仅适用于XLSX格式(XSSFWorkbook),不兼容XLS格式的加密逻辑
完整示例代码
using System.IO; using NPOI.POIFS.Crypt; using NPOI.XSSF.UserModel; using NPOI.OpenXml4Net.OPC; public void EncryptXlsxWithPassword() { // 1. 加载现有XLSX文件或创建新工作簿 XSSFWorkbook workbook; // 如果是加载本地已有文件,用以下代码: // using (FileStream fs = new FileStream("待加密文件.xlsx", FileMode.Open, FileAccess.Read)) // { // workbook = new XSSFWorkbook(fs); // } // 示例为创建新工作簿 workbook = new XSSFWorkbook(); var sheet = workbook.CreateSheet("测试表"); sheet.CreateRow(0).CreateCell(0).SetCellValue("加密后需要输入密码才能打开查看"); // 2. 配置加密规则 // 可选加密模式:AES128 / AES192 / AES256,AES128兼容所有主流Office版本 EncryptionInfo encryptionInfo = new EncryptionInfo(EncryptionMode.AES128); Encryptor encryptor = encryptionInfo.Encryptor; // 替换为你要设置的打开密码 encryptor.ConfirmPassword("your_open_password"); // 3. 生成加密后的文件 using (MemoryStream plainStream = new MemoryStream()) { // 将未加密的工作簿写入内存流 workbook.Write(plainStream); plainStream.Position = 0; // 输出加密后的文件到本地 using (FileStream outputFs = new FileStream("加密后文件.xlsx", FileMode.Create, FileAccess.Write)) { using (Stream encryptedStream = encryptor.GetDataStream(outputFs)) { plainStream.CopyTo(encryptedStream); } } } workbook.Close(); }
常见问题说明
- 该加密方式为文件级打开权限控制,用户打开文件时必须输入正确密码才能查看内容,和工作表编辑保护的
ProtectSheet方法功能完全独立 - 如果需要修改已加密文件的密码,需先输入原密码解密加载工作簿后,再重新按上述逻辑设置新密码
- AES256加密模式仅支持Office 2013及以上版本打开,低版本Office会提示无法解密
内容的提问来源于stack exchange,提问作者Pavel Hodek
相关产品推荐
相关产品推荐

