.net用NPOI生成Word表格

NPOI读取或生成Excel是非常容易弄懂和实现的,但是生成word表格就不容易了,特别是行列合并,以及同一个单元格内用多种样式,以下是我在项目中生成word表格时的部分代码,记下来备忘。

  1 CT_SectPr srcpr = new CT_SectPr();
  2                 //设置A4纸纵向,如果要横向,两个值调换即可
  3                 srcpr.pgSz.w = (ulong)11906;
  4                 srcpr.pgSz.h = (ulong)16838;
  5
  6                 XWPFDocument doc = new XWPFDocument();
  7                 doc.Document.body.sectPr = srcpr;
  8                 //输出标题
  9                 XWPFParagraph ptitle = doc.CreateParagraph();
 10                 ptitle.Alignment = ParagraphAlignment.CENTER;
 11                 XWPFRun titlerun = ptitle.CreateRun();
 12                 titlerun.SetText(string.Format("{0}营销考勤与工作计划",para.date));
 13                 titlerun.SetBold(true);
 14                 titlerun.FontFamily = "华文行楷";
 15                 titlerun.FontSize = 30;
 16                 titlerun.SetColor("blue");
 17
 18                 WorkPlanService wbll = new WorkPlanService();
 19                 XWPFParagraph tipm = doc.CreateParagraph();
 20                 tipm.Alignment = ParagraphAlignment.CENTER;
 21                 XWPFRun tiprun = tipm.CreateRun();
 22                 tiprun.SetText(string.Format("生成时间:{0}", dtime.ToString("yyyy-MM-dd HH:mm")));
 23                 tiprun.FontSize = 15;
 24                 titlerun.FontFamily = "宋体";
 25                 CT_Row ctrow = null;
 26                 XWPFTableRow mrow = null;
 27                 XWPFTableCell cell = null;
 28                 CT_Tc cttc = null;
 29                 CT_TcPr ctpr = null;
 30                 CT_P ctp = null;
 31                 XWPFParagraph cp = null;
 32                 XWPFRun xtrun = null;
 33                 //取这天的工作计划
 34                 //取工作计划
 35                 WorkPlanBM wbm = null;
 36                 IList<WorkPlanDetailsBM> wlist = null;
 37                 foreach (var sm in slist)
 38                 {
 39                     List<AttendRecordsBM> flist = list.Where(m => m.UserNo == sm.UserNo).ToList<AttendRecordsBM>();
 40                     if (flist == null || flist.Count == 0) continue;
 41                     XWPFTable tab = doc.CreateTable();
 42                     tab.Width = 5100;
 43                     foreach (var fm in flist)
 44                     {
 45                         string dktimeStr = string.Format("{0}", BaseMethod.FormatDate(fm.DkTime, "yyyy-MM-dd HH:mm"));
 46                         string dkAddr = string.Format("{0}", fm.Addr);
 47                         MyOperationResult mr = wbll.GetSingle(sm.UserNo, 0, false, ref wbm, ref wlist);
 48                         string planStr = string.Empty;
 49                         if (wlist == null)
 50                         {
 51                             planStr = string.Format("没有写计划或者有计划没有提交!");
 52                         }
 53                         else
 54                         {
 55                             StringBuilder psb = new StringBuilder();
 56                             foreach (var pm in wlist)
 57                             {
 58                                 psb.Append(pm.PlanTitle);
 59                             }
 60                             planStr = psb.ToString();
 61                         }
 62                         ctrow = new CT_Row();
 63                         if (tab.Rows.Count == 1 && tab.GetRow(0).GetTableCells().Count == 1)
 64                         {
 65                             mrow = tab.GetRow(0);
 66                             cell = mrow.GetCell(0);
 67                         }
 68                         else
 69                         {
 70                             mrow = new XWPFTableRow(ctrow, tab);
 71                             tab.AddRow(mrow);
 72                             cell = mrow.CreateCell();
 73                         }
 74                         cttc = cell.GetCTTc();
 75                         ctpr = cttc.AddNewTcPr();
 76                         ctpr.AddNewVMerge().val = ST_Merge.restart;//注意:合并行时,第一行用ST_Meger.restart,后面的被合并的列用[email protected]
 77                         ctpr.AddNewVAlign().val = ST_VerticalJc.center;
 78                         cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
 79                         ctp = cttc.GetPList()[0];
 80                         cp = cell.GetParagraph(ctp);
 81                         xtrun = cp.CreateRun();
 82                         xtrun.SetText(string.Format("{0}", sm.UserName));
 83                         cp = cell.AddParagraph();
 84                         cp.Alignment = ParagraphAlignment.CENTER;
 85                         xtrun = cp.CreateRun();
 86                         xtrun.SetText(string.Format("{0}", sm.UserNo));
 87
 88                         cell = mrow.CreateCell();
 89                         cttc = cell.GetCTTc();
 90                         ctpr = cttc.AddNewTcPr();
 91                         ctp = cttc.GetPList()[0];
 92                         cp = cell.GetParagraph(ctp);
 93                         xtrun = cp.CreateRun();
 94                         xtrun.SetText("打卡时间:");
 95                         xtrun.SetBold(true);
 96                         xtrun = cp.CreateRun();
 97                         xtrun.SetText(dktimeStr);
 98                         //cttc.GetPList()[0].AddNewR().AddNewT().Value = dktimeStr;
 99
100                         ctrow = new CT_Row();
101                         mrow = new XWPFTableRow(ctrow, tab);
102                         tab.AddRow(mrow);
103                         cell = mrow.CreateCell();
104                         cttc = cell.GetCTTc();
105                         ctpr = cttc.AddNewTcPr();
106                         ctpr.AddNewVMerge().val = [email protected];
107
108                         cell = mrow.CreateCell();
109                         cttc = cell.GetCTTc();
110                         ctpr = cttc.AddNewTcPr();
111                         ctp = cttc.GetPList()[0];
112                         cp = cell.GetParagraph(ctp);
113                         xtrun = cp.CreateRun();
114                         xtrun.SetText("打卡地点:");
115                         xtrun.SetBold(true);
116                         xtrun = cp.CreateRun();
117                         xtrun.SetText(dkAddr);
118                         //cell.SetText(dkAddr);
119
120                         ctrow = new CT_Row();
121                         mrow = new XWPFTableRow(ctrow, tab);
122                         tab.AddRow(mrow);
123                         cell = mrow.CreateCell();
124                         cttc = cell.GetCTTc();
125                         ctpr = cttc.AddNewTcPr();
126                         ctpr.AddNewVMerge().val = [email protected];
127
128                         cell = mrow.CreateCell();
129                         cttc = cell.GetCTTc();
130                         ctpr = cttc.AddNewTcPr();
131                         ctp = cttc.GetPList()[0];
132                         cp = cell.GetParagraph(ctp);
133                         xtrun = cp.CreateRun();
134                         xtrun.SetText("工作计划:");
135                         xtrun.SetBold(true);
136                         xtrun = cp.CreateRun();
137                         xtrun.SetText(planStr);
138                         //cell.SetText(planStr);
139                     }
140                     XWPFParagraph p = doc.CreateParagraph();

下面是生成的效果图:

用的dll是从github上下载的最新的,其实也不新了,2015年版的,有需要的自己去下吧

时间: 2024-12-04 19:06:31

.net用NPOI生成Word表格的相关文章

poi 生成word 表格,并向表格单元格中插入多个图片

接这上一篇,导入数据,也要完整导出来.话不多说,直接上代码. 效果图 //根据实体对象 ,生成XWPFDocument public static XWPFDocument exportDataInfoWord(List<DataInfoEntity> list) throws NoSuchFieldException,IllegalAccessException { MyXWPFDocument doc = new MyXWPFDocument(); XWPFTable table = do

用Aspose.Words for .NET动态生成word文档中的数据表格

1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档不是导出来之后再调整而是导出来后已经是调整过了的.看到这里,您也许马上想到用模板导出!而且.NET中自带有这个组件:Microsoft.Office.Interop.Word,暂且可以满足需求吧.但这个组件也是有局限性的,例如客户端必须装 office组件,而且编码复杂度高.最麻烦的需求是后面那个-

通过Aspose.Word和ZXING生成复杂的WORD表格

1.前言 这是我之前做的一个项目中要求的功能模块,它的需求是生成一个WORD文档,需要每页一个表格并且表格中需要插入文字.条形码和二维码等信息,页数可控制.具体的效果如下图所示: 可以看到有以下几点是我需要解决的重点: 1.如何生成WORD并插入表格和文字: 2.如何合并表格的单元格: 3.如何生成二维码和条形码并且插入到表格中: 4.如何对WORD分页: 可以说只要解决了这几点这个功能就解决了,一开始我是想用Microsoft.Office.Interop.Word来生成WORD的但是感觉比较

Java利用poi生成word(包含插入图片,动态表格,行合并)

转: Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插入图片,动态表格,行合并) 测试模板样式: Word生成结果: 图表 2需要的jar包:(具体jar可自行去maven下载) 注意:需要严格按照上面版本下载jar包,否则可能出现jar包之间不能匹配的导致代码报错 各种 jar包都可以在这里下载: https://mvnrepository.com/ Tes

C#简单实现动态数据生成Word文档并保存

今天正好有人问我,怎么生成一个报表式的Word文档. 就是文字的样式和位置相对固定不变,只是里面的内容从数据中读取. 我觉得类似这种的一般用第三方报表来做比较简便.但既然要求了Word,只好硬着头皮来. 网上的方法大多数都是从一个GridView或表中获得数据后向Word中添加一个表格. (图1) 我们使用Word模板来实现,方法如下: 1.首先需要向工程中的“引用”加入Word类库的引用(图2).我是Office 2003.其他版本可能略有不同.在COM里面 (图2) 2.用Word设计一个模

velocity模板技术生成word文档

本文介绍采用velocity技术在Java中生成word文档的方法. 1.新建一个word文档,编辑内容如下: 2.将上述word文档另存为htm格式的文件 3.新建一个Java Project项目velocityTest,加入Velocity所依赖的Jar包velocity-dep-1.5-beta2.jar. 4.在src目录下新建一个velocity.vm文件,将第二步生成的velocity.htm用文本编辑器打开,复制内容到velocity.vm中.内容如下: <html xmlns:v

JSP生成word文件

1.jsp生成word文件,直接修改jsp格式: <%@ page contentType="application/vnd.ms-word;charset=GB2312"%> <%@ pagepageEncoding="GB2312"%> <% String fileName ="word.doc"; byte[] bt =fileName.getBytes("GB2312"); String

java使用iText生成pdf表格

转载地址:http://www.open-open.com/code/view/1424011530749 首先需要你自己下载itext相关的jar包并添加引用,或者在maven中添加如下引用配置: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <dependency>     <groupId>com.lowagie</groupId>     <artifactId>iText</artifactId>  

使用freemarker生成word,步骤详解并奉上源代码

1.   步骤 1.    用word编辑好模板 1. 普通字符串替换为 ${string} 2. 表格循环用标签 <#list userList as user> 姓名:${user.userName} , 性别:${user.sex} </#list> word模板原型如下图: 最终生成的结果如下: 2.    将word模板另存为xml格式 选中 [ 仅保存数据 ] 选择 [ 保持wordML(K) ] 3.    将xml模板文件后缀名改为.ftl 4.    编辑ftl文