NPOI 2.0导出word(docx格式)

摘要:
著名的NPOI使用许多文章来导出EXCEL,但用于导出WORD文档的文章大多模棱两可。最近,我们刚刚完成了导出WORD文档的要求。让我们在这里分享。NPOI认为单词文档最基本的结构是一个段落,代表这个段落的类是XWPFParagraph。此类可用于设置段落中的字体、大小和粗体。

大名鼎鼎的NPOI用来导出EXCEL的文章园子里面有很多,可是用来导出WORD文档的文章大都含糊不清,最近刚好完成一个导出WORD文档的需求,在此分享下。

NPOI里面认为word文档的最基本的结构是段落,代表这个段落的类就是XWPFParagraph,使用这个类可以设置段落里面的字体、大小、以及是否加粗等。

代表整个文档的的类XWPFDocument,是最外层的容器相当于一个word文档的实例,代表表格的类XWPFTable,是较小级别的段落容器相当于一个表格的实例。

一个XWPFDocument可以添加多个XWPFTable和多个XWPFParagraph,一个XWPFTable可以添加多个XWPFParagraph

现在我们要创建一个有几个段落和表格的word文档,其中,表格里面要显示带格式的文字(微软雅黑,小四),形如

NPOI 2.0导出word(docx格式)第1张

首先,需要创建一个XWPFDocument doc = newXWPFDocument(),随后用文档实例doc创建段落1~段落n

 1            XWPFParagraph p0 = doc.CreateParagraph();
 2             p0.SetAlignment(ParagraphAlignment.LEFT);
 3             XWPFRun r0 = p0.CreateRun();
 4             r0.SetFontFamily("宋体");
 5             r0.SetFontSize(18);
 6             r0.SetBold(true);
 7             r0.SetText("未登录过学生的账号密码");
 8 
 9             XWPFParagraph p1 = doc.CreateParagraph();
10             p1.SetAlignment(ParagraphAlignment.LEFT);
11             XWPFRun r1 = p1.CreateRun();
12             r1.SetFontFamily("宋体");
13             r1.SetFontSize(10);
14             r1.SetBold(true);
15             r1.SetText("(备注:已登录过的学生密码不显示)");
16 
17             XWPFParagraph p2 = doc.CreateParagraph();
18             p2.SetAlignment(ParagraphAlignment.LEFT);
19             XWPFRun r2 = p2.CreateRun();
20             r2.SetFontFamily("宋体");
21             r2.SetFontSize(10);
22             r2.SetBold(true);
23             r2.SetText("学校:XX一中");
24 
25             XWPFParagraph p3 = doc.CreateParagraph();
26             p3.SetAlignment(ParagraphAlignment.LEFT);
27             XWPFRun r3 = p3.CreateRun();
28             r3.SetFontFamily("宋体");
29             r3.SetFontSize(10);
30             r3.SetBold(true);
31             r3.SetText("班级:(7)");
32 
33             XWPFParagraph p4 = doc.CreateParagraph();
34             p4.SetAlignment(ParagraphAlignment.LEFT);
35             XWPFRun r4 = p4.CreateRun();
36             r4.SetFontFamily("宋体");
37             r4.SetFontSize(10);
38             r4.SetBold(true);
39             r4.SetText("班主任:ddd");
40 
41 
42             XWPFParagraph p5 = doc.CreateParagraph();
43             p5.SetAlignment(ParagraphAlignment.LEFT);
44             XWPFRun r5 = p5.CreateRun();
45             r5.SetFontFamily("宋体");
46             r5.SetFontSize(10);
47             r5.SetBold(true);
48             r5.SetText("可以在此处添加备注:");

然后用doc创建个4行4列XWPFTable table = doc.CreateTable(4, 4)

接着很多人根据vs的点出来的方法或者是NPOI原作者tonyqus的教程http://tonyqus.sinaapp.com/archives/614,使用table的单元格的SetParagraph()方法直接设置构造好的段落就行了,但是,事实证明这样做是不对的,这样的话会使得构造出来的段落不光会显示在table里面,而且还会显示在其他地方。正确的方法应该是使用table单元格的AddParagraph()方法直接生成一个专属于表格的段落。

 1                     XWPFParagraph pIO = table.GetRow(i).GetCell(0).AddParagraph();
 2                     XWPFRun rIO = pIO.CreateRun();
 3                     rIO.SetFontFamily("微软雅黑");
 4                     rIO.SetFontSize(12);
 5                     rIO.SetBold(true);
 6                     rIO.SetText(i.ToString());
 7                     
 8 
 9                     XWPFParagraph pINo =table.GetRow(i).GetCell(1).AddParagraph();
10                     XWPFRun rINo = pINo.CreateRun();
11                     rINo.SetFontFamily("微软雅黑");
12                     rINo.SetFontSize(12);
13                     rINo.SetBold(true);
14                     rINo.SetText(notLoginStudents[i - 1].UserName);
15 
16 
17                     XWPFParagraph pIMm = table.GetRow(i).GetCell(2).AddParagraph();
18                     XWPFRun rIMm = pIMm.CreateRun();
19                     rIMm.SetFontFamily("微软雅黑");
20                     rIMm.SetFontSize(12);
21                     rIMm.SetBold(true);
22                     rIMm.SetText(notLoginStudents[i - 1].PassWord);
23                     
24 
25                     XWPFParagraph pIName = table.GetRow(i).GetCell(3).AddParagraph();
26                     XWPFRun rIName = pIName.CreateRun();
27                     rIName.SetFontFamily("微软雅黑");
28                     rIName.SetFontSize(12);
29                     rIName.SetBold(true);
30                     rIName.SetText(notLoginStudents[i - 1].StudentName);

随后,把文档写入流doc.Write(new MemoryStream()),接着你想干神马就都OK了。

免责声明:文章转载自《NPOI 2.0导出word(docx格式)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OpenCV 2.4.8组件结构全解析解决pgpool启动报错 ifup[/sbin/ip] doesn't have setuid bit下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jq获取动态添加的行 并查找点击行同胞元素中的input值 遍历table中td下元素的值

1.非动态添加的行 获取同胞中的input输入值$("op-submit").click(function(event){ var text1 = $(event.currentTarget).parent().prev().find("input").val(); var text2 = $(event.currentTarget).p...

laravel框架实现商品订单加入到rabbitMQ队列

一、 创建一个任务类 php artisan make:job QueuedTest  //执行之后app/Jobs目录下生成一个QueuedTest.php 二、创建控制器 php artisan make:controller QueuedController 执行之后生成app/Http/Controllers/QueuedControlle...

lua basic

assert(condition) condition为nil或false,报错。反之正常执行。 collectgarbage(opt, ...) 手动这类GC是一件不太理想的事情,不管什么语言都是这样的,除非设计缺陷万不得已"collect" # 做一次完整的垃圾收集循环。"stop" # 停止垃圾收集器的运行。"restart" # 重启垃圾收集器的自...

SQL查询速度慢的原因分析和解决方案

SQL查询速度慢的原因分析和解决方案 查询速度慢的原因很多,常见如下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I/O吞吐量小,形成了瓶颈效应。3、没有创建计算列导致查询不优化。4、内存不足5、网络速度慢6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)7、锁或者死锁(这也是查询慢最常见的问题,是程序设计...

Table显示滚动条

Table显示滚动条,要先把table放到一个div中,div的长度和宽度要固定,控制overflow属性为scroll ˂!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--˃<div style="...

第一次使用Layui 分页

第一步:添加引用 <link href="~/Content/layuiCMS/layui/css/layui.css" rel="stylesheet" /> <script src="~/Content/layuiCMS/layui/layui.js"></script> 二、界面设计 <div class="...