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

相关推荐

  • 如何利用aspx实现伪静态效果?揭秘高效SEO优化技巧!

    在ASP.NET Web Forms(.aspx)环境中实现伪静态是通过URL重写技术将动态URL转换为静态URL格式的过程,这能显著提升搜索引擎友好性、用户体验和网站权威性,核心方法是利用IHttpModule接口或第三方库(如UrlRewritingNet)配置规则,将类似/product.aspx?id……

    2026年2月4日
    12830
  • V.PS全场95折圣何塞KVM怎么买?圣何塞GIA 9929线路KVM VPS测评

    V.PS推出的圣何塞GIA 9929线路KVM VPS以€5.65/月的超低价格提供2核1GB内存及1TB流量,配合全场95折优惠码,是目前性价比极高的跨境网络加速方案,圣何塞GIA 9929线路KVM VPS性能深度解析在跨境网络环境中,延迟和丢包率是衡量VPS质量的硬指标,V.PS此次推出的圣何塞节点,主打……

    2026年6月18日
    3600
  • ajax如何从数据库读取数据?ajax读取数据库长尾词

    Ajax从数据库读取数据的核心在于通过JavaScript发起异步HTTP请求,后端接口查询数据并返回JSON格式结果,前端解析后动态更新页面DOM,实现无刷新局部刷新,Ajax异步加载的技术原理与核心优势在传统Web开发模式中,用户每次点击链接或提交表单,浏览器都会向服务器发送完整请求,服务器返回整个HTML……

    2026年5月31日
    3300
  • 为什么ASP.NET总是丢失Session?3步快速修复Session丢失问题

    在ASP.NET Web Forms开发中,指令是嵌入在.aspx、.ascx、.master等页面文件顶部的特殊声明,它们并非呈现给用户的HTML代码,而是为ASP.NET运行时引擎和编译器提供关键元数据和配置指示,是控制页面或用户控件行为、编译方式以及与应用程序交互的核心机制,理解并熟练运用各类指令,是构建……

    2026年2月11日
    11700
  • 如何用ASP.NET实现选课系统?选课系统开发步骤教程

    构建高效稳定的ASP.NET选课系统:核心架构与专业实践选课系统是现代教育机构的核心运营支撑,其性能、稳定性和用户体验直接影响教学秩序与管理效率,基于ASP.NET Core技术栈构建选课系统,凭借其高性能、安全性和强大的生态系统,能够为高校、培训机构提供专业级的解决方案,本文将深入探讨ASP.NET选课系统的……

    2026年2月9日
    10900
  • 人工智能对经济生活的影响,AI对经济生活有哪些具体影响?

    人工智能已从单纯的技术概念演变为重塑全球经济格局的核心力量,其深度渗透不仅改变了宏观经济数据的走势,更直接重构了每一个微观个体的财富逻辑与生活方式,核心结论在于:人工智能正在通过极致提升生产效率来创造巨大的经济增量,但同时也在引发就业结构、收入分配以及消费模式的剧烈重构,个体与组织必须主动适应“人机协作”的新范……

    2026年2月21日
    18100
  • 更新根证书失败怎么办?如何批量更新系统根证书

    更新根证书是保障HTTPS通信安全、防止中间人攻击及避免浏览器报错的关键操作,建议定期通过系统更新或手动导入最新受信任根证书列表来维持信任链完整,在数字信任体系中,根证书扮演着“信任锚点”的角色,一旦根证书过期或被发现存在安全漏洞,整个基于该根证书签发的所有子证书都会瞬间失效,对于普通用户而言,这表现为网页打不……

    程序编程 2026年5月27日
    4200
  • lisahost美国双ISP家宽VPS值得入手吗,美国住宅IP VPS月付推荐

    Lisahost美国双ISP家宽住宅IP VPS新上线,凭借9929高速网络与月付仅61元的亲民价格,为需要稳定海外网络环境的用户提供了极具性价比的选择,在当前的网络环境中,获取高质量的美国住宅IP并非易事,许多用户面临IP被封禁、网络延迟高或价格昂贵等问题,Lisahost推出的这款新产品,直击这些痛点,通过……

    2026年7月4日
    13500
  • AIoT需要什么技术?AIoT开发必备哪些核心技能?

    AIoT(人工智能物联网)的成功落地,本质上是一场“边缘智能”与“云端大脑”的深度协同,其核心技术体系可以概括为“端-边-云-网-智”五位一体的架构,这并非简单的AI与IoT物理叠加,而是通过底层硬件感知、边缘计算预处理、网络传输保障、云端算力支撑以及数据智能算法的深度融合,实现从“万物互联”向“万物智联”的跨……

    2026年3月9日
    15700
  • AIoT发电原理是什么?AIoT智能发电系统应用

    AIoT发电并非传统意义上的能量创造,而是通过人工智能与物联网技术的深度融合,对分布式能源进行实时感知、智能调度与高效优化,从而实现发电效率最大化与电网稳定性提升的系统性解决方案,很多人对“AIoT发电”存在误解,以为这是一种全新的物理发电技术,它更像是一个超级聪明的“电网大脑”,传统的发电方式依赖人工经验或简……

    2026年6月14日
    3010

发表回复

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