You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在C#中使用开源库生成带密码保护的Excel文件是否可行?

在C#中使用开源库生成带密码保护的Excel文件是否可行?

绝对可行!我太懂你折腾48小时钻坑的崩溃感了,你提到的这几个开源库其实大多都能实现密码保护,我给你逐个捋清楚,附上手把手的代码片段:

NPOI

NPOI对Excel密码保护的支持分格式版本,覆盖很全面:

  • 针对.xls(Excel 97-2003):支持得非常成熟,既能设置打开密码(必须输入才能查看内容),也能设置修改权限密码(限制编辑)。
  • 针对.xlsx(OOXML格式):从NPOI 2.5+版本开始已经支持AES级别的打开密码加密,记得引用最新稳定版。

代码示例(生成加密的.xlsx文件)

using NPOI.XSSF.UserModel;
using NPOI.POIXML.Encryption;
using System.IO;

// 创建工作簿和工作表
var workbook = new XSSFWorkbook();
var sheet = workbook.CreateSheet("敏感数据页");
var headerRow = sheet.CreateRow(0);
headerRow.CreateCell(0).SetCellValue("保密字段1");
headerRow.CreateCell(1).SetCellValue("保密字段2");

// 配置AES-256加密
var encryptionInfo = new EncryptionInfo(EncryptionMode.AES_256);
var encryptor = encryptionInfo.Encryptor;
encryptor.ConfirmPassword("YourSecurePassword123"); // 替换成你的密码

// 写入并加密保存
using (var fs = new FileStream("NPOI加密文件.xlsx", FileMode.Create))
using (var encryptedStream = encryptor.GetDataStream(fs))
{
    workbook.Write(encryptedStream);
}

ClosedXML

ClosedXML是处理.xlsx的轻量库,API设计非常简洁,原生支持两种密码保护,上手成本极低,推荐给侧重开发效率的场景。

代码示例

using ClosedXML.Excel;
using System.IO;

// 创建工作簿和填充数据
var workbook = new XLWorkbook();
var sheet = workbook.Worksheets.Add("核心敏感数据");
sheet.Cell(1, 1).Value = "用户ID";
sheet.Cell(1, 2).Value = "隐私数据";
sheet.Cell(2, 1).Value = "U001";
sheet.Cell(2, 2).Value = "******";

// 设置打开密码(必填)和修改权限密码(可选)
workbook.Protect("OpenPass123", "EditPass456");

// 保存加密文件
using (var fs = new FileStream("ClosedXML加密文件.xlsx", FileMode.Create))
{
    workbook.SaveAs(fs);
}

MiniExcel

MiniExcel主打轻量、高速度的大数据导出,原生没有直接的Excel加密API,但可以结合开源Zip库实现加密——因为.xlsx本质是压缩包,我们可以先导出未加密的文件,再用Zip加密工具二次处理:

变通实现(配合DotNetZip)

  1. 先引用开源的DotNetZip NuGet包(完全免费开源)
  2. 按以下代码实现:
using MiniExcelLibs;
using Ionic.Zip;
using System.IO;

// 1. 用MiniExcel导出未加密的临时文件
var tempFilePath = Path.GetTempFileName();
var dataList = new[] 
{
    new { 用户ID = "U002", 敏感内容 = "内部机密" },
    new { 用户ID = "U003", 敏感内容 = "内部机密" }
};
MiniExcel.SaveAs(tempFilePath, dataList);

// 2. 用DotNetZip加密保存为最终xlsx
var targetPath = "MiniExcel加密文件.xlsx";
using (var zip = new ZipFile())
{
    zip.Password = "ZipPass789"; // 设置加密密码
    zip.AddFile(tempFilePath, "").FileName = "加密数据.xlsx";
    zip.Save(targetPath);
}

// 清理临时文件
File.Delete(tempFilePath);

关键注意事项

  • 优先选择AES-256级别的加密,避免使用老旧的XOR加密,安全性更高。
  • 测试时要验证多软件兼容性:比如加密后的文件在Office 365、WPS、LibreOffice中能否正常打开。
  • 如果需要兼容.xls老格式,NPOI是最优选择;如果只做.xlsx,ClosedXML的开发体验更顺畅。

你可以根据项目的格式需求、性能要求挑对应的方案,有具体的坑可以再提出来!

火山引擎 最新活动