第01章-NPOI概述与入门
第一章:NPOI概述与入门
1.1 NPOI简介
1.1.1 什么是NPOI
NPOI是一个强大的.NET库,用于读取、写入和操作Microsoft Office文件(Excel、Word、PowerPoint),无需安装Microsoft Office软件。它是Apache POI项目的.NET移植版本,完全开源免费,广泛应用于企业级应用开发中。
NPOI的名称来源于:
- N - 代表.NET平台
- POI - 源自Apache POI(Poor Obfuscation Implementation)
1.1.2 NPOI的发展历程
2008年 - NPOI项目启动,由Tony Qu(屈喆)创建
↓
2010年 - 支持Excel 2007格式(.xlsx)
↓
2012年 - 支持Word文档(.docx)
↓
2015年 - 支持PowerPoint(.pptx)
↓
2020年 - 全面支持.NET Core和.NET 5
↓
2024年 - 支持.NET 6/7/8,持续活跃开发中
1.1.3 NPOI的核心优势
- 无需安装Office:服务器端处理文档无需安装Microsoft Office
- 完全免费开源:Apache 2.0许可证,商业项目可免费使用
- 跨平台支持:支持Windows、Linux、macOS
- 高性能:内存占用低,处理速度快
- 功能完整:支持Excel、Word、PowerPoint的主要功能
- 活跃维护:GitHub上持续更新,社区活跃
1.2 支持的文件格式
1.2.1 Excel文件格式
| 格式 | 扩展名 | 说明 | NPOI类 |
|---|---|---|---|
| Excel 97-2003 | .xls | 二进制格式(BIFF8) | HSSFWorkbook |
| Excel 2007+ | .xlsx | OpenXML格式 | XSSFWorkbook |
| Excel 流式写入 | .xlsx | 大数据量优化 | SXSSFWorkbook |
1.2.2 Word文件格式
| 格式 | 扩展名 | 说明 | NPOI类 |
|---|---|---|---|
| Word 2007+ | .docx | OpenXML格式 | XWPFDocument |
| Word 97-2003 | .doc | 二进制格式 | HWPFDocument(有限支持) |
1.2.3 PowerPoint文件格式
| 格式 | 扩展名 | 说明 | NPOI类 |
|---|---|---|---|
| PowerPoint 2007+ | .pptx | OpenXML格式 | XMLSlideShow |
| PowerPoint 97-2003 | .ppt | 二进制格式 | HSLFSlideShow |
1.3 NPOI架构概览
1.3.1 核心命名空间
NPOI
├── NPOI.SS.UserModel # 电子表格抽象接口
├── NPOI.HSSF.UserModel # Excel 97-2003 (.xls)
├── NPOI.XSSF.UserModel # Excel 2007+ (.xlsx)
├── NPOI.XWPF.UserModel # Word 2007+ (.docx)
├── NPOI.HWPF.UserModel # Word 97-2003 (.doc)
├── NPOI.XSLF.UserModel # PowerPoint 2007+ (.pptx)
├── NPOI.HSLF.UserModel # PowerPoint 97-2003 (.ppt)
├── NPOI.SS.Util # 电子表格工具类
└── NPOI.Util # 通用工具类
1.3.2 接口与实现的关系
NPOI采用接口抽象设计,使得代码可以在不同格式间复用:
// 统一接口
IWorkbook workbook; // 工作簿接口
ISheet sheet; // 工作表接口
IRow row; // 行接口
ICell cell; // 单元格接口
// .xls格式实现
workbook = new HSSFWorkbook();
// .xlsx格式实现
workbook = new XSSFWorkbook();
// 相同的操作代码
ISheet sheet = workbook.CreateSheet("Sheet1");
IRow row = sheet.CreateRow(0);
ICell cell = row.CreateCell(0);
cell.SetCellValue("Hello NPOI!");
1.3.3 整体架构图
┌─────────────────────────────────────────────────────────────────┐
│ 应用程序代码 │
├─────────────────────────────────────────────────────────────────┤
│ NPOI 抽象接口层 │
│ IWorkbook │ ISheet │ IRow │ ICell │ ICellStyle │
├─────────────────────────────────────────────────────────────────┤
│ NPOI 实现层 │
│ ┌─────────────────┐ ┌─────────────────┐ ┌────────────────┐ │
│ │ HSSF (.xls) │ │ XSSF (.xlsx) │ │ SXSSF (流式) │ │
│ └─────────────────┘ └─────────────────┘ └────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 底层支持库 │
│ ┌─────────────────┐ ┌─────────────────┐ ┌────────────────┐ │
│ │ POIFS (OLE2) │ │ OpenXml4Net │ │ ICSharpCode │ │
│ └─────────────────┘ └─────────────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
1.4 NPOI与其他库的对比
1.4.1 NPOI vs EPPlus
| 特性 | NPOI | EPPlus |
|---|---|---|
| 开源协议 | Apache 2.0(免费) | Polyform Noncommercial(商业收费) |
| Excel格式 | .xls + .xlsx | 仅.xlsx |
| Word支持 | 支持 | 不支持 |
| PowerPoint支持 | 支持 | 不支持 |
| 性能 | 优秀 | 优秀 |
| 社区活跃度 | 高 | 高 |
1.4.2 NPOI vs ClosedXML
| 特性 | NPOI | ClosedXML |
|---|---|---|
| 开源协议 | Apache 2.0 | MIT |
| Excel格式 | .xls + .xlsx | 仅.xlsx |
| Word/PPT支持 | 支持 | 不支持 |
| API友好度 | 中等 | 高 |
| 功能完整性 | 高 | 中 |
1.4.3 NPOI vs Microsoft Office Interop
| 特性 | NPOI | Office Interop |
|---|---|---|
| 需要Office | 不需要 | 需要安装Office |
| 服务器使用 | 推荐 | 不推荐 |
| 性能 | 高 | 低 |
| 稳定性 | 高 | 容易出现COM错误 |
| 跨平台 | 支持 | 仅Windows |
1.5 适用场景
1.5.1 推荐使用NPOI的场景
✅ 报表导出:批量生成Excel报表
✅ 数据导入:解析用户上传的Excel文件
✅ 文档生成:自动化生成Word合同、报告
✅ 模板填充:基于模板生成个性化文档
✅ 服务器端处理:Web应用中的文档处理
✅ 批量处理:大量文档的自动化处理
✅ 跨平台应用:Linux服务器上的文档处理
1.5.2 可能不适合的场景
⚠️ 需要完整Office功能(如VBA宏执行)
⚠️ 复杂的PowerPoint动画效果
⚠️ 需要实时预览文档效果
⚠️ 极其复杂的Word排版
1.6 快速入门示例
1.6.1 创建第一个Excel文件
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;
// 创建工作簿
IWorkbook workbook = new XSSFWorkbook();
// 创建工作表
ISheet sheet = workbook.CreateSheet("员工信息");
// 创建表头
IRow headerRow = sheet.CreateRow(0);
headerRow.CreateCell(0).SetCellValue("姓名");
headerRow.CreateCell(1).SetCellValue("年龄");
headerRow.CreateCell(2).SetCellValue("部门");
// 创建数据行
IRow dataRow = sheet.CreateRow(1);
dataRow.CreateCell(0).SetCellValue("张三");
dataRow.CreateCell(1).SetCellValue(28);
dataRow.CreateCell(2).SetCellValue("技术部");
// 保存文件
using (FileStream fs = new FileStream("员工信息.xlsx", FileMode.Create))
{
workbook.Write(fs);
}
Console.WriteLine("Excel文件创建成功!");
1.6.2 读取Excel文件
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;
// 打开文件
using (FileStream fs = new FileStream("员工信息.xlsx", FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new XSSFWorkbook(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);
Console.Write($"{GetCellValue(cell)}\t");
}
Console.WriteLine();
}
}
// 获取单元格值的辅助方法
static string GetCellValue(ICell cell)
{
if (cell == null) return "";
return cell.CellType switch
{
CellType.String => cell.StringCellValue,
CellType.Numeric => cell.NumericCellValue.ToString(),
CellType.Boolean => cell.BooleanCellValue.ToString(),
CellType.Formula => cell.CellFormula,
_ => ""
};
}
1.6.3 创建第一个Word文档
using NPOI.XWPF.UserModel;
using System.IO;
// 创建文档
XWPFDocument doc = new XWPFDocument();
// 创建标题段落
XWPFParagraph titlePara = doc.CreateParagraph();
titlePara.Alignment = ParagraphAlignment.CENTER;
XWPFRun titleRun = titlePara.CreateRun();
titleRun.SetText("NPOI Word文档示例");
titleRun.IsBold = true;
titleRun.FontSize = 20;
// 创建正文段落
XWPFParagraph bodyPara = doc.CreateParagraph();
XWPFRun bodyRun = bodyPara.CreateRun();
bodyRun.SetText("这是使用NPOI创建的第一个Word文档。NPOI是一个强大的.NET库,可以轻松操作Office文档。");
bodyRun.FontSize = 12;
// 保存文件
using (FileStream fs = new FileStream("示例文档.docx", FileMode.Create))
{
doc.Write(fs);
}
Console.WriteLine("Word文档创建成功!");
1.7 本章小结
本章介绍了NPOI的基本概念、发展历程和核心优势。通过本章学习,你应该了解到:
- NPOI是Apache POI的.NET移植版本,完全开源免费
- 支持Excel(.xls/.xlsx)、Word(.docx)、PowerPoint(.pptx)等格式
- 无需安装Microsoft Office,可在服务器端安全使用
- 采用接口抽象设计,代码可在不同格式间复用
- 与其他库相比,NPOI在功能完整性和开源协议方面具有优势
在接下来的章节中,我们将深入学习NPOI的各项功能,从环境搭建开始,逐步掌握Excel、Word、PowerPoint的完整操作方法。
下一章预告:第二章将详细介绍NPOI的环境搭建和项目配置,包括NuGet包安装、版本选择建议和基础项目结构。

浙公网安备 33010602011771号