NPOI 2.0导出word(docx格式)
大名鼎鼎的NPOI用来导出EXCEL的文章园子里面有很多,可是用来导出WORD文档的文章大都含糊不清,最近刚好完成一个导出WORD文档的需求,在此分享下。
NPOI里面认为word文档的最基本的结构是段落,代表这个段落的类就是XWPFParagraph,使用这个类可以设置段落里面的字体、大小、以及是否加粗等。
代表整个文档的的类XWPFDocument,是最外层的容器相当于一个word文档的实例,代表表格的类XWPFTable,是较小级别的段落容器相当于一个表格的实例。
一个XWPFDocument可以添加多个XWPFTable和多个XWPFParagraph,一个XWPFTable可以添加多个XWPFParagraph
现在我们要创建一个有几个段落和表格的word文档,其中,表格里面要显示带格式的文字(微软雅黑,小四),形如

首先,需要创建一个XWPFDocument doc = new XWPFDocument(),随后用文档实例doc创建段落1~段落n
XWPFParagraph p0 = doc.CreateParagraph();
p0.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r0 = p0.CreateRun();
r0.SetFontFamily("宋体");
r0.SetFontSize();
r0.SetBold(true);
r0.SetText("未登录过学生的账号密码"); XWPFParagraph p1 = doc.CreateParagraph();
p1.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r1 = p1.CreateRun();
r1.SetFontFamily("宋体");
r1.SetFontSize();
r1.SetBold(true);
r1.SetText("(备注:已登录过的学生密码不显示)"); XWPFParagraph p2 = doc.CreateParagraph();
p2.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r2 = p2.CreateRun();
r2.SetFontFamily("宋体");
r2.SetFontSize();
r2.SetBold(true);
r2.SetText("学校:XX一中"); XWPFParagraph p3 = doc.CreateParagraph();
p3.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r3 = p3.CreateRun();
r3.SetFontFamily("宋体");
r3.SetFontSize();
r3.SetBold(true);
r3.SetText("班级:(7)"); XWPFParagraph p4 = doc.CreateParagraph();
p4.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r4 = p4.CreateRun();
r4.SetFontFamily("宋体");
r4.SetFontSize();
r4.SetBold(true);
r4.SetText("班主任:ddd"); XWPFParagraph p5 = doc.CreateParagraph();
p5.SetAlignment(ParagraphAlignment.LEFT);
XWPFRun r5 = p5.CreateRun();
r5.SetFontFamily("宋体");
r5.SetFontSize();
r5.SetBold(true);
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()方法直接生成一个专属于表格的段落。
XWPFParagraph pIO = table.GetRow(i).GetCell().AddParagraph();
XWPFRun rIO = pIO.CreateRun();
rIO.SetFontFamily("微软雅黑");
rIO.SetFontSize();
rIO.SetBold(true);
rIO.SetText(i.ToString()); XWPFParagraph pINo =table.GetRow(i).GetCell().AddParagraph();
XWPFRun rINo = pINo.CreateRun();
rINo.SetFontFamily("微软雅黑");
rINo.SetFontSize();
rINo.SetBold(true);
rINo.SetText(notLoginStudents[i - ].UserName); XWPFParagraph pIMm = table.GetRow(i).GetCell().AddParagraph();
XWPFRun rIMm = pIMm.CreateRun();
rIMm.SetFontFamily("微软雅黑");
rIMm.SetFontSize();
rIMm.SetBold(true);
rIMm.SetText(notLoginStudents[i - ].PassWord); XWPFParagraph pIName = table.GetRow(i).GetCell().AddParagraph();
XWPFRun rIName = pIName.CreateRun();
rIName.SetFontFamily("微软雅黑");
rIName.SetFontSize();
rIName.SetBold(true);
rIName.SetText(notLoginStudents[i - ].StudentName);
随后,把文档写入流doc.Write(new MemoryStream()),接着你想干神马就都OK了。
NPOI 2.0导出word(docx格式)的更多相关文章
- NPOI插件生成导出word文档
因为之前没有接触NPOI过这个插件,所以几乎都是自己一边百度摸索一边学习. 这个插件对于Excel的数据导入和导出,可以说是很方便了, 但是对于导出word文档,可以说是很少的,百度了很多....也不 ...
- jQuery wordexport导出 word
同事给我说了简单的导出word的插件,亲测了下,做个随笔. 这个导出插件是jQuery自带的的插件,通过调用wordexport.js来实现导出功能. 1.引入的js <script type= ...
- java导出2007版word(docx格式)freemarker + xml 实现
http://blog.csdn.net/yigehui12/article/details/52840121 Freemarker+xml生成docx 原理概述:word从2003版就支持xml格式 ...
- 【c#搬砖记】用Docx导出word格式的docx文件
DocX开源网址:http://docx.codeplex.com/ 1.引入DocX.dll 调用ReplaceText()方法替换模板中的字符.只支持docx格式的word文档 using (Do ...
- .net core 使用NPOI填充Word模板导出Word
最近工作用到在Word模板插入数据库数据,导出一个带数据的Word文件,想起来之前操作Word都是用微软提供的Microsoft.Office.Interop.Word,而在最新的..NET CORE ...
- c#.Net:Excel导入/导出之NPOI 2.0简介
NPOI 2.0+主要由SS, HPSF, DDF, HSSF, XWPF, XSSF, OpenXml4Net, OpenXmlFormats组成,具体列表如下: 资料来自:百度百科 Ass ...
- poi导出word文档,doc和docx
maven <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency> <gro ...
- FineReader Mac如何设置参数让导出为DOCX/RTF/ODT格式
Mac版ABBYY FineReader OCR文字识别软件识别文档之后,可以将已识别的文本保存到文件中,还可以通过电子邮件发送输出格式受FineReader支持的已识别文本,了解了ABBYY Fin ...
- NPOI导出word,以及对table的一些设置
参考网址:http://www.aiuxian.com/article/p-1970779.html NPOI版本:2.1.3.1 最终效果图: 代码: /// <summary> /// ...
随机推荐
- HDU5596/BestCoder Round #66 (div.2) 二分BIT/贪心
GTW likes gt Memory Limit: 131072/131072 K (Java/Others) 问题描述 从前,有nn只萌萌的GT,他们分成了两组在一起玩游戏.他们会排列成一排 ...
- 模拟+思维 HDOJ 5319 Painter
题目传送门 /* 题意:刷墙,斜45度刷红色或蓝色,相交的成绿色,每次刷的是连续的一段,知道最终结果,问最少刷几次 模拟+思维:模拟能做,网上有更巧妙地做法,只要前一个不是一样的必然要刷一次,保证是最 ...
- Linux下查看进程和线程
在linux中查看线程数的三种方法 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行显示一个进程. 2.ps xH 手册 ...
- linux 如何让程序后台执行
$ (./test.sh &) $ setsid ./test.sh & $ nohup ./test.sh & 具体的转自:http://digdeeply.or ...
- IDL---ENVI
ENVI;启动envi file=envi_pickfile();选择文件dialog,返回值就为file ENVI_OPEN_FIle,file,r_fid=fid;根据文件名打开file,并且返回 ...
- 易犯的PHP小错误及相应分析
变量声明如果在一条语句中声明一个变量,如下所示:$var = 'value'; 编译器首先会求出语句右半部分的值,恰恰正是语句的这一部分常常会引发错误.如果使用的语法不正确,就会出现解析错误. 解析错 ...
- 【原创】通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...
这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 < [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 >. 当然,如果只是针对解决这个Mysql插入报错 ...
- VC操作ADO的基本策略
一.ADO概述 ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口.ADO 使您能够编写应用程序以通过 OLE. DB 提供者访问和操作数据 ...
- ThinkPad L421 如何禁用触摸板
控制面板 - 硬件和声音 - 鼠标 . 选中如下图所示的 UltraNav 选项卡. 将 启用 TouchPad 前的 √ 去掉即可. 如果没有 UltraNav 这一选项卡,可至联想官网下载相关驱动 ...
- BZOJ 2115 Xor(抑或值最大路径)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2115 题意:给出一个带权无向图.求一条1到n的路径使得路径上权值的抑或值最大? 思路:( ...