大名鼎鼎的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格式)的更多相关文章

  1. NPOI插件生成导出word文档

    因为之前没有接触NPOI过这个插件,所以几乎都是自己一边百度摸索一边学习. 这个插件对于Excel的数据导入和导出,可以说是很方便了, 但是对于导出word文档,可以说是很少的,百度了很多....也不 ...

  2. jQuery wordexport导出 word

    同事给我说了简单的导出word的插件,亲测了下,做个随笔. 这个导出插件是jQuery自带的的插件,通过调用wordexport.js来实现导出功能. 1.引入的js <script type= ...

  3. java导出2007版word(docx格式)freemarker + xml 实现

    http://blog.csdn.net/yigehui12/article/details/52840121 Freemarker+xml生成docx 原理概述:word从2003版就支持xml格式 ...

  4. 【c#搬砖记】用Docx导出word格式的docx文件

    DocX开源网址:http://docx.codeplex.com/ 1.引入DocX.dll 调用ReplaceText()方法替换模板中的字符.只支持docx格式的word文档 using (Do ...

  5. .net core 使用NPOI填充Word模板导出Word

    最近工作用到在Word模板插入数据库数据,导出一个带数据的Word文件,想起来之前操作Word都是用微软提供的Microsoft.Office.Interop.Word,而在最新的..NET CORE ...

  6. c#.Net:Excel导入/导出之NPOI 2.0简介

      NPOI 2.0+主要由SS, HPSF, DDF, HSSF, XWPF, XSSF, OpenXml4Net, OpenXmlFormats组成,具体列表如下: 资料来自:百度百科   Ass ...

  7. poi导出word文档,doc和docx

    maven <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency> <gro ...

  8. FineReader Mac如何设置参数让导出为DOCX/RTF/ODT格式

    Mac版ABBYY FineReader OCR文字识别软件识别文档之后,可以将已识别的文本保存到文件中,还可以通过电子邮件发送输出格式受FineReader支持的已识别文本,了解了ABBYY Fin ...

  9. NPOI导出word,以及对table的一些设置

    参考网址:http://www.aiuxian.com/article/p-1970779.html NPOI版本:2.1.3.1 最终效果图: 代码: /// <summary> /// ...

随机推荐

  1. android-non-ui-ui-thread-communications-part-5-5

    This is the last post in my series regarding Android thread communications.  Parts 1 through 4 are l ...

  2. Ajax实例-购物车

    一.概述 1.当添加或删除商品时,购物车会立即更新数据 2.思路: (1)建立商品类Item.java,存有商品属性name,prince,code(商品编码)等 (2)建立商品目录类Catalog. ...

  3. qt resize() 和 geometry()

    resize(),设置的部件客户区的大小.只有当该部件被show后才生效,即geomery() 返回的才是 resize() 的客户区大小.

  4. ruby脚本,随机生成复杂密码

    简单版本: base_char = (32..126).map{|i|i.chr} - ["'",'"'," ", "`",&qu ...

  5. nginx添加nginx_mod_h264_streaming-2.2.7模块编译报错

    报错ngx_http_streaming_module.c:158: 错误:‘ngx_http_request_t’ 没有名为 ‘zero_in_uri’ 的成员.这需要修改nginx_mod_h26 ...

  6. 寻找最小的k个数

    1. 能想到的最直接的办法,就是对数组进行排序,最好的排序算法的时间复杂性为O(n*logn),这一个方法请参照各种排序算法. 2. 另外申请一个k空间数组,依次更改里面的最大值,每做一次最多要扫描一 ...

  7. 每天一个小算法(Shell Sort3)

    希尔算法自己编了一个,循环很多,很不美观,不过运行正确: c语言实现: #include <stdio.h> #include <stdlib.h> #define LEN 2 ...

  8. SQLServer2008 行转列

    with a as( select *,row_number() over(partition by hyid order by jp desc) rowid from rtc) select a.h ...

  9. NDK(4)"Unresolved inclusion jni.h”的解决方法

    参考 :  http://blog.csdn.net/zhubin215130/article/details/39347873 3种解决办法: 一,重新初始化eclipse对该project的nat ...

  10. PhpStorm+PhpStudy+xdebug 配置图解

    1.配置niginx.ini,新增 server节点,比如使用9200 端口 server { listen 9200;#本地调试,不用80端口 server_name localhost; #cha ...