如何使用NPOI操作Excel文件,NPOI读写Excel代码怎么写?

NPOI 操作 Excel 完整指南

NPOI 是一个强大的 .NET 开源库,用于在没有安装 Microsoft Office 的情况下读写 Excel (.xls 和 .xlsx) 文件,它通过实现 POI (Java) 的功能,成为了 .NET 平台处理 Office 文档的主流选择。

核心概念与版本区分

在开始操作前,需要了解 NPOI 处理两种不同格式 Excel 的类:

C#不要再使用Npoi啦,使用MiniExcel操作Excel文件更快更好更高效
加载中
C#不要再使用Npoi啦,使用MiniExcel操作Excel文件更快更好更高效
  • HSSFWorkbook: 用于处理旧版本的 Excel 格式 ( .xls ),基于 BIFF8 格式。
  • XSSFWorkbook: 用于处理新版本的 Excel 格式 ( .xlsx ),基于 OOXML 格式。
  • IWorkbook: 它是上述两个类的接口,建议在编写代码时使用接口,以提高代码的通用性。

层级结构:
IWorkbook (工作簿) $rightarrow$ ISheet (工作表) $rightarrow$ IRow (行) $rightarrow$ ICell (单元格)


环境搭建

通过 NuGet 包管理器安装 NPOI:

Install-Package NPOI

写入 Excel 文件

写入文件的核心流程是:创建工作簿 $rightarrow$ 创建工作表 $rightarrow$ 创建行 $rightarrow$ 创建单元格 $rightarrow$ 写入值 $rightarrow$ 保存文件。

如何使用NPOI操作Excel文件,NPOI读写Excel代码怎么写?

基础写入示例 (.xlsx)

using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
// 1. 创建工作簿
IWorkbook workbook = new XSSFWorkbook();
// 2. 创建工作表
ISheet sheet = workbook.CreateSheet("员工信息");
// 3. 创建第一行(表头)
IRow headerRow = sheet.CreateRow(0);
headerRow.CreateCell(0).SetCellValue("姓名");
headerRow.CreateCell(1).SetCellValue("年龄");
headerRow.CreateCell(2).SetCellValue("部门");
// 4. 写入数据行
IRow dataRow = sheet.CreateRow(1);
dataRow.CreateCell(0).SetCellValue("张三");
dataRow.CreateCell(1).SetCellValue(25);
dataRow.CreateCell(2).SetCellValue("技术部");
// 5. 将工作簿写入文件流
using (FileStream fs = new FileStream("Employee.xlsx", FileMode.Create, FileAccess.Write))
{
    workbook.Write(fs);
}

读取 Excel 文件

读取文件的核心流程是:打开文件流 $rightarrow$ 加载工作簿 $rightarrow$ 获取工作表 $rightarrow$ 遍历行和单元格。

基础读取示例

using NPOI.SS.UserModel;
using System.IO;
using (FileStream fs = new FileStream("Employee.xlsx", FileMode.Open, FileAccess.Read))
{
    // 使用 WorkbookFactory 自动识别 .xls 或 .x

如何使用NPOI操作Excel文件,NPOI读写Excel代码怎么写?

lsx IWorkbook workbook = WorkbookFactory.Create(fs); ISheet sheet = workbook.GetSheetAt(0); // 获取第一个工作表 // 遍历所有行 for (int i = 0; i <= sheet.LastRowNum; i++) { IRow row = sheet.GetRow(i); if (row == null) continue; // 跳过空行 // 遍历所有单元格 for (int j = 0; j < row.LastCellNum; j++) { ICell cell = row.GetCell(j); if (cell != null) { Console.Write(cell.ToString() + "t"); } } Console.WriteLine(); } }

进阶操作

1 设置单元格样式

样式需要通过 IWorkbook.CreateCellStyle() 创建,注意:不要在循环中频繁创建样式,否则会导致 Excel 文件损坏(样式数量有限制)。

ICellStyle style = workbook.CreateCellStyle();
IFont font = workbook.CreateFont();
font.IsBold = true; // 加粗
font.Color = IndexedColors.Blue.Index; // 蓝色
style.SetFont(font);
style.Alignment = HorizontalAlignment.Center; // 居中
ICell cell = sheet.GetRow(0).GetCell(0);
cell.CellStyle = style;

2 合并单元格

使用 sheet.AddMergedRegion 方法。

// 合并第一行第0列到第2列 (行索引, 行索引, 列索引, 列索引)
sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 2));

如何使用NPOI操作Excel文件,NPOI读写Excel代码怎么写?

3 写入公式

使用 SetCellFormula 方法。

IRow row = sheet.CreateRow(2);
row.CreateCell(0).SetCellValue(100);
row.CreateCell(1).SetCellValue(200);
// 在第三个单元格写入求和公式 A3+B3
row.CreateCell(2).SetCellFormula("SUM(A3:B3)");

核心注意事项与性能优化

  • 内存管理:对于超大型 Excel 文件,XSSFWorkbook 会消耗大量内存,如果需要写入海量数据,建议研究 SXSSFWorkbook(流式写入,仅限 Java 版 POI,.NET NPOI 在处理极大文件时需谨慎控制内存)。
  • 空值处理:在读取时,GetRow() 和 GetCell() 可能会返回 null,必须进行非空判断,否则会抛出 NullReferenceException。
  • 资源释放:务必将 FileStream 放在 using 块中,确保文件在操作完成后被正确关闭。
  • 数据类型:ICell 有多种类型(Numeric, String, Boolean, Formula),在读取时建议使用 cell.CellType 进行判断,以获取最准确的数据。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/493266.html

赞 (0)
发会员关怀的便宜系统哪个好,会员管理系统哪个好用且便宜?
上一篇 2026年7月14日 05:25
服务器内存指标检测报告怎么看,服务器内存占用高怎么优化?
下一篇 2026年7月14日 05:30

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注