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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:15:03