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

相关推荐

  • 深圳移动IPv6 VPS年付128元值得买吗,中港IPLC专线价格

    CoalCloud炭云深圳移动IPv6 VPS年付仅需128元,配合预售中的中港IPLC专线,是目前兼顾低成本与低延迟的优选方案,在服务器租赁市场,价格与性能的平衡点始终是用户关注的焦点,对于需要访问内地或跨境业务的技术人员而言,寻找一款既便宜又稳定的VPS并非易事,CoalCloud炭云推出的深圳移动IPv6……

    2026年6月29日
    6800
  • 如何在Excel方框里打勾?excel单元格打勾符号

    在Excel单元格中打勾,最标准且高效的方法是使用“ Wingdings 2”字体配合大写“P”或“R”,或者通过“数据验证”创建下拉列表选择符号,这两种方式能确保符号在不同设备上稳定显示且易于批量处理,很多人遇到表格需要打勾的需求时,第一反应是插入符号或者画形状,但这在处理大量数据时不仅效率低下,还容易因为字……

    2026年7月9日
    11800
  • DCE 5.0是什么?DCE 5.0九大核心能力详解

    DaoCloud Enterprise 5.0(DCE 5.0)是专为混合云及信创环境打造的云原生操作系统,通过整合多云编排、微服务治理及可观测性等九大核心能力,帮助企业实现从底层基础设施到上层应用的全链路数字化升级,在数字化转型进入深水区的当下,企业面临的挑战已不再仅仅是“上云”,而是如何管好云、用好云,DC……

    2026年6月18日
    2700
  • 租用服务器哪家最便宜,简米云和酷番云哪个性价比更高?

    寻找“服务器哪家便宜”的答案时,核心不在于绝对低价,而在于“首年优惠”与“续费成本”的平衡,对于个人及初创项目,主流云厂商的新人专享活动是目前性价比最高的切入点,服务器哪家便宜且稳定在云计算市场,寻找“便宜”的服务器往往伴随着对稳定性的担忧,很多用户陷入的误区是只看首年价格,忽略了后续的运维成本和性能瓶颈,业内……

    2026年7月13日
    600
  • ajax定时查询数据库怎么实现?前端定时刷新数据

    通过AJAX实现定时查询数据库,核心在于利用JavaScript的setInterval或setTimeout函数配合XMLHttpRequest或fetch API,以非阻塞方式定期向服务器发起异步请求,从而在不刷新页面的情况下获取最新数据,为什么选择AJAX定时查询而非页面刷新?在传统的Web开发模式中,用……

    2026年6月2日
    4500
  • AI是云计算还是大数据功能,人工智能属于云计算还是大数据

    人工智能既不是云计算的附属功能,也不是大数据的单一应用场景,而是一个独立且具有颠覆性的技术领域,要厘清这三者的关系,最准确的定义是:云计算是基础设施与底座,大数据是生产资料与燃料,而人工智能则是核心引擎与生产力工具,这三者共同构成了现代数字经济的“铁三角”,缺一不可,互为支撑,在探讨AI是云计算还是大数据功能这……

    2026年2月18日
    22400
  • AI中台首购活动怎么参加?AI中台首购活动优惠有哪些

    企业数字化转型已进入深水区,构建高效、低成本的人工智能基础设施成为关键胜负手,AI中台首购活动不仅是企业降低试错成本的绝佳窗口,更是快速构建核心算法能力的战略跳板,通过首购优惠,企业能以最小投入验证AI中台的业务适配度,实现从“观望”到“落地”的跨越,完成数据资产的价值变现,核心价值:低成本验证与敏捷交付AI中……

    2026年3月6日
    10400
  • ExtraVM美国VPS循环5折低至3美元,达拉斯VPS无限流量推荐

    ExtraVM推出的循环5折促销活动中,美国达拉斯VPS确实低至$3/月,且具备1Gbps带宽与10Gbps防御能力,适合对性价比和基础防护有需求的用户,在云服务器市场,价格波动往往是用户关注的焦点,ExtraVM近期推出的循环折扣活动,将原本定位中端的产品线拉入了极致性价比的区间,对于许多预算有限但需要稳定海……

    2026年7月1日
    1310
  • 如何构建智慧停车生态圈?智慧停车系统建设方案有哪些

    构建智慧停车生态圈的核心在于打通“车-场-云”数据孤岛,通过物联网、大数据与AI算法实现车位资源的动态调度与全场景无缝衔接,从而彻底解决“停车难”与“管理乱”的行业痛点,从单一设施到生态协同的底层逻辑过去,停车场只是物理空间的租赁场所,车主找车位靠运气,管理者收停车费靠人工,这种割裂的状态导致资源极度浪费,智慧……

    程序编程 2026年5月25日
    3700
  • 服务器CPU多核家用好吗?家用服务器多核CPU性能实测

    服务器CPU多核家用是目前高性能低成本计算方案的最佳选择,尤其适合有虚拟化、NAS组建、软路由及视频剪辑需求的进阶用户,核心结论在于:利用服务器级CPU的多核并行优势,用户可以以极低的预算获得远超主流家用PC的多任务处理能力,但必须正视其单核性能偏弱、平台架构老旧及高功耗的潜在短板, 这并非适用于所有人的“万能……

    2026年3月30日
    9600

发表回复

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