如何使用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://test.idctop.com/article/493266.html

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

相关推荐

  • 如何选择专业php开发团队?高效php外包服务推荐

    在当今快速发展的数字时代,一个高效的PHP开发团队是企业构建强大Web应用的核心驱动力,它不仅能加速项目交付,还能确保代码质量和创新力,下面,我将基于多年实战经验,为您提供一份全面的PHP开发团队建设教程,涵盖从组建到优化的全流程,什么是PHP开发团队及其重要性PHP开发团队由一组专业开发者组成,专注于使用PH……

    2026年2月14日
    13700
  • 如何实现ASP上传Excel文件并高效导入Access数据库的详细步骤?

    要将Excel文件通过ASP上传并将数据导入Access数据库,可以遵循以下步骤实现,这一过程结合了文件上传、数据解析和数据库操作,适合在Windows服务器环境下运行,使用ASP(Active Server Pages)技术结合VBScript脚本完成,以下是详细的操作指南和核心解决方案,环境准备与配置确保服……

    2026年2月3日
    10900
  • aspxurl静态究竟有何优势?揭秘其在网站开发中的奥秘!

    ASPXURL静态化是指将动态生成的ASPX页面转换为静态HTML文件的过程,这一技术能显著提升网站性能、增强搜索引擎优化(SEO)效果并改善用户体验,对于使用ASP.NET框架的网站来说,实现URL静态化是提升网站竞争力的关键步骤,下面将详细探讨其原理、优势、实施方法及注意事项,ASPXURL静态化的核心原理……

    2026年2月4日
    11720
  • 广州轻量应用服务器到期数据会被清空么?云服务器到期不续费数据还能恢复吗

    广州轻量应用服务器到期后,若未及时续费或备份数据,系统将在宽限期结束后自动释放资源,所有数据将被彻底清空且无法恢复,到期清空机制:底层逻辑与时间节点云厂商的“沙漏”计时规则轻量应用服务器之所以被称为“轻量”,在于其资源分配的高效与紧凑,当服务器到期,云平台需回收计算、存储与网络资源以重新分配,根据2026年头部……

    2026年4月27日
    5100
  • 英国双isp住宅ip家宽VPS八折月付44元起值得购买吗,六六云666clouds测评

    六六云666clouds凭借英国双ISP架构与AS9929优质线路,以月付44元起的极低门槛提供高性价比VPS服务,是追求稳定海外连接与低成本部署用户的理想选择,在云服务器市场内卷严重的当下,寻找一款既便宜又稳定的海外VPS并非易事,许多用户在使用廉价VPS时,常遇到IP被墙、延迟高、连接不稳定等痛点,六六云6……

    2026年7月1日
    2000
  • ajax请求网络异常怎么办?ajax请求失败常见原因及解决方法

    当Ajax请求出现网络异常时,核心解决思路是区分前端超时设置、后端服务状态及网络环境稳定性,通过增加重试机制、优化超时阈值及监控服务端日志来快速定位并修复问题,在开发Web应用时,Ajax请求失败是开发者最常遇到的“拦路虎”,这不仅仅是代码写错那么简单,它往往牵涉到浏览器缓存、服务器负载、网络波动甚至跨域策略……

    2026年5月30日
    5700
  • Excel手册怎么下载,Excel零基础入门教程去哪找?

    Excel 学习手册与资源获取指南Excel 功能强大且更新频繁,微软官方目前主要通过在线文档库提供支持,而非单一的离线手册,以下是获取高质量 Excel 学习资源和官方指南的权威途径与建议,微软官方资源(最权威)微软官方支持中心是获取最准确、最新功能说明的唯一渠道,Microsoft 支持中心: 访问 sup……

    2026年7月14日
    1900
  • 酷番云服务器IP密码忘了怎么办?,如何找回密码?

    如果你忘记了腾讯云服务器的IP地址和登录密码,最快的方法是通过腾讯云控制台查看实例详情获取IP,并使用重置密码功能重新设置密码,腾讯云服务器IP怎么看?通过控制台快速找回忘记服务器IP是常见问题,尤其是管理多台实例时,腾讯云提供了直观的查看路径,不需要命令行基础,在实例列表页直接复制IP登录腾讯云控制台,进入……

    2026年8月17日
    500
  • Excel散点图方程如何设置并显示在图表中?,怎么添加

    在Excel散点图中,获取回归方程的核心操作是右键点击数据点选择“添加趋势线”,并在格式窗格中勾选“显示公式”和“显示R平方值”,同时根据数据分布选择线性、指数或多项式等趋势线类型以保证拟合精度, 这个操作看似简单,但背后涉及趋势线选择、方程解读和实际应用场景,许多人往往忽略关键步骤导致结论偏差,无论是财务分析……

    2026年7月18日
    2400
  • AIoT智联植物工厂是什么?AIoT智联植物工厂如何助力农业增收?

    AIoT智联植物工厂代表了现代农业生产的最高形态,其核心价值在于通过人工智能与物联网技术的深度融合,实现了作物生长环境的绝对可控与生产效率的极致优化,这种新型生产模式彻底打破了传统农业对自然环境的依赖,将农业生产从“靠天吃饭”转变为“数据驱动”,不仅实现了产量与品质的双重飞跃,更解决了劳动力短缺与耕地不足的深层……

    2026年3月22日
    10400

发表回复

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