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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:55:08