• 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了。

  • 相关阅读:
    The Problem of Programming Language Concurrency Semantics
    AMD64 Architecture Programmer’s Manual Volume 1: Application Programming
    Intel® 64 Architecture Memory Ordering White Paper
    Systems Benchmarking Crimes
    A Guide to Undefined Behavior in C and C++, Part 1
    39张IoT传感器工作原理GIF动图汇总
    全真互联
    从Context到go设计理念
    中国汽车基础软件发展白皮书3.0
    设备影子
  • 原文地址:https://www.cnblogs.com/afutureBoss/p/4074397.html
Copyright © 2020-2023  润新知