
简介面向C#开发者的NPOI操作Word文档示例项目演示了如何通过NPOI生成Word文档并实现图片和表格的插入。资源以SQLLiteToWord工程为主线结合SQLite数据源完整展示从数据库读取数据、转化为Word表格再到通过NPOI API嵌入图片的全过程适合有基础.NET开发经验、需要做报表自动化或文档导出的技术人员。包内共218个文件包含大量dll依赖如NPOI、System.Data.SQLite等、11个cs源码文件、doc/docx说明文档、config配置文件以及jpg/png示例图片另有xml、transform等工程配置文件压缩包约35.08MB目录结构清晰可直接编译参考。已有6098人学习下载资料提供从数据读取、表格构建到图片插入的完整实现思路重点覆盖XWPFTable表格创建与样式调整、XWPFPictureData图片插入等关键API操作并附有第三方程序集与配置脚本帮助读者快速搭建环境并理解NPOI在Word自动化中的实际用法可应用于日常报表生成、数据导出等场景。 第一次在客户现场升级软件对方的服务器是Windows Server Core没有装Office环境我凌晨三点爬起来改代码把整套用Word COM动态生成检测报告的方案整个推翻重写成NPOI。从那以后任何涉及自动生成Word文档的需求我第一选择都是NPOI没有之一。对于经常和C#打交道的开发者来说NPOI是一个不需要额外安装Microsoft Office即可操作Office文档的开源库。它继承了Apache POI的.NET版逻辑目前已经覆盖.xlsx、.docx等常见格式。这篇内容主要针对docx格式讲清楚怎么用NPOI在Word里插入图片和表格并以一个完整的巡检报告生成作为实战收尾。不管是做上位机、管理系统还是报表工具这套思路都能直接复用。1. 跳过Office COM为什么NPOI值得放进你的工具箱先看传统COM方案的痛点服务器必须装Office一旦碰到Server Core或未授权环境基本无解。COM对象释放是噩梦操作不当进程挂在后台内存疯长。无法跨平台Linux部署方案基本被堵死。OpenXML SDK是微软官方封装底层生成的docx非常标准但API过于底层。设置一个单元格边框要碰一堆OpenXmlCompositeElement类型代码量很大。特别是你只是想生成一份带几行表格的简单报告时会觉得相当痛苦。NPOI的优势很直接就是面向普通开发者的对象模型。你不需要知道Word的XML结构操作起来跟操作二维数组差不多改改单元格、插插表格几十行代码就能搞定。1.1 和Word COM、OpenXML SDK的对比维度Word COMOpenXML SDKNPOI依赖Office是否否跨平台否是是API复杂度中高低社区资料多但旧官方文档全论坛案例多内存释放容易泄漏安全安全针对批量生成报表、合同、工单这种开发场景NPOI在开发效率和部署成本上的优势非常明显。我后来在客户服务器上直接把NPOI的DLL丢上去不装任何Office组件Word文档照样生成部署省了一个量级。1.2 XWPF和HWPF怎么选用NPOI读Word要分清两个类族类族对应格式适用场景HWPF.docWord 97-2003二进制格式兼容老文档XWPF.docxWord 2007 OOXML格式绝大多数新项目我个人建议新项目一律走XWPF。doc是老古董了很多新样式在HWPF上支持较差而且HWPF对表格的样式控制能力很弱。docx本质就是一个ZIP包里面是若干XML文件NPOI把XML解析成了对象模型所以你看到XWPFDocument类就对应根document.xml操作性能和稳定性都高很多。2. 准备环境XWPF对象模型和项目初始化2.1 NuGet依赖要操作XWPF先安装NPOI包。我用的是2.6.2版本NPOI虽然也支持.NET Framework 4.x但如果你在新项目里建议直接上.NET 6/8性能更好跨平台部署也不用考虑Office因素。在Package Manager Console里执行Install-Package NPOI基于x86/x64部署的话默认引用没问题。如果你的项目是AnyCPU可能会遇到NPOI依赖的SharpZipLib版本冲突一般升级到最新稳定版即可解决。2.2 XWPF对象层级速览第一次写NPOI时最头疼的是记不住对象关系。给你一个简单的对照XWPFDocument整个Word文档对应document.xmlXWPFParagraph文档中的一个段落一个段落可以包含文字、图片、超链接等XWPFRun段落内的富文本片段最小的格式化单元字体、字号、加粗都挂在Run上XWPFTable文档中的表格XWPFTableRow表格中的一行XWPFTableCell行中的一个单元格这个层级和Word的UI视图一一对应。你在Word里看到的每个段落是XWPFParagraph每段里的不同字体内容是XWPFRun每个表格是XWPFTable这是理解所有后续代码的地基。一个重要概念Word文档里所有内容都由段落和表格构成。图片不是直接插进文档而是插到某个段落的Run里。记住这一点你会少走很多弯路。3. 插入表格从创建行列到单元格合并与列宽控制3.1 创建一个基础表格最直接的做法using NPOI.XWPF.UserModel; var doc new XWPFDocument(); // 创建5行3列的表格 var table doc.CreateTable(5, 3); // 填充数据 table.GetRow(0).GetCell(0).SetText(编号); table.GetRow(0).GetCell(1).SetText(设备名); table.GetRow(0).GetCell(2).SetText(状态); for (int i 1; i 5; i) { table.GetRow(i).GetCell(0).SetText(i.ToString()); table.GetRow(i).GetCell(1).SetText(设备- i); table.GetRow(i).GetCell(2).SetText(正常); } using var fs new FileStream(d:\report.docx, FileMode.Create, FileAccess.Write); doc.Write(fs);生成的是默认样式表格没有边框、没有特殊格式。如果你需要Word文档里常见的黑色边框表格需要手动设置本文还有配套的精品资源点击获取