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

相关推荐

  • AI智能音响算法是什么,智能音箱语音识别怎么实现?

    AI智能音响算法的核心在于构建一个集感知、认知与交互于一体的智能闭环,其本质是通过深度学习技术将语音信号转化为可理解的语义,并精准反馈,从而实现从“听到”到“听懂”再到“执行”的跨越, 这一过程并非单一技术的应用,而是声学信号处理、自动语音识别(ASR)、自然语言处理(NLP)以及语音合成(TTS)等多模态算法……

    2026年2月25日
    17700
  • HostingViet越南原生IP VPS年付5折值得买吗?越南云服务器推荐

    HostingViet 提供越南原生 IP 的 VPS 服务,年付享受 5 折优惠,1GB 内存、20G SSD 存储及无限流量配置仅需 161 元起,是追求低成本与稳定性的优质选择,在云服务器市场日益内卷的当下,寻找一款性价比高且网络环境纯净的 VPS 并非易事,许多用户受困于日本线路的拥堵或美国线路的高延迟……

    2026年6月27日
    1600
  • 如何基于Android开发游戏?Android游戏开发教程、步骤与工具推荐

    基于Android的游戏开发:高效、可扩展、高兼容性的实战路径在移动游戏市场持续增长的背景下,基于Android的游戏开发已成为开发者实现快速上线与规模化分发的核心路径,Android设备全球出货量常年占全球智能手机市场的70%以上,覆盖从入门级到旗舰级的全价位段用户群体,为游戏提供了广阔触达空间,本文基于行业……

    2026年4月16日
    6200
  • LOCVPSVPS测评,159.2元/月方案实测对比,vps测评哪家性价比高

    2元/月方案的实测结论是:该配置在2026年属于“入门级高可用”甜点区间,适合个人开发者、小型WordPress站点及轻量级API服务,但在高并发I/O场景下需配合SSD优化,性价比优于同价位竞品约15%-20%,方案配置深度拆解与硬件基准核心参数解析在2026年的云计算市场中,159.2元/月这一特定价格点通……

    2026年5月24日
    3300
  • AI导出图片模糊是什么原因,AI图片锯齿怎么解决

    图片在经过AI处理并存储为Web或设备通用格式(如JPG、PNG、WebP)时出现毛边、锯齿或模糊现象,其核心原因并非单一因素导致,而是压缩算法的数据取舍、分辨率重采样的插值误差、色彩空间转换的精度损失以及抗锯齿处理机制失效共同作用的结果,这一过程本质上是高维数据向低维数据映射时的信息损耗,特别是在边缘高频信息……

    2026年2月27日
    12400
  • 江苏机柜租用的电力与扩展空间怎么评估

    评估江苏机柜租用的电力和扩展空间,核心是匹配业务负载与机房基础设施的冗余能力,同时预留未来3-5年的增长余量, 江苏作为华东数据中心集群的核心区域,机柜资源集中分布在南京、苏州、无锡等地,评估时不能只看报价清单,更要看电力天花板和扩容灵活性,下面从电力容量、扩展路径、实际场景三个维度拆解,帮你避开“租完才发现不……

    2026年8月10日
    500
  • 安卓 UI 开发怎么做?安卓界面开发教程

    在当前的移动互联时代,高效的安卓 UI 开发已不再仅仅是界面绘制的技术实现,而是演变为一套融合架构设计、性能优化与多设备适配的系统工程,核心结论在于:构建高质量的安卓应用界面,必须彻底摒弃传统的“xml布局+findViewByid”的陈旧模式,全面拥抱Jetpack Compose声明式UI范式,并建立严格的……

    2026年4月8日
    8900
  • 如何构建自己的对象存储?自建对象存储方案有哪些

    构建私有对象存储的核心在于利用开源软件(如MinIO或Ceph)结合普通硬件搭建高可用集群,这不仅能彻底解决数据主权问题,还能将长期存储成本降低50%以上,是中小企业和个人极客替代公有云的最佳方案,很多人提到存储,第一反应是买NAS或者订阅阿里云OSS,但对于追求数据隐私、长期成本控制以及技术掌控力的用户来说……

    2026年5月25日
    5400
  • PHP开发工资月薪多少?最新薪资待遇水平揭秘!

    PHP作为一种久经考验且应用广泛的服务器端脚本语言,在全球Web开发领域占据着重要地位,对于开发者而言,了解PHP开发的薪资水平及其影响因素,是进行职业规划和提升的重要参考,在中国市场,PHP开发工程师的月薪范围大致在 8,000元 至 35,000元 人民币之间,中位数通常在 15,000元 – 20,000……

    2026年2月13日
    14700
  • 课程开发指南,如何从零开始打造爆款网课?课程开发流程详解

    高效的课程开发是一个系统化的工程,其核心在于精准的需求分析、结构化的内容设计以及科学的效果评估,一套成熟的课程体系,必须能够解决实际业务问题,同时具备良好的用户体验,课程开发的本质不是知识的简单堆砌,而是将隐性经验转化为显性知识,并通过合理的教学设计实现能力的迁移, 成功的课程开发项目,通常遵循“需求定方向、内……

    2026年4月3日
    11200

发表回复

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