首页 > 代码库 > NPOI 2.0导出word(docx格式)
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
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格式)