惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
GbyAI
GbyAI
人人都是产品经理
人人都是产品经理
T
Tor Project blog
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
爱范儿
爱范儿
雷峰网
雷峰网
MongoDB | Blog
MongoDB | Blog
Vercel News
Vercel News
美团技术团队
博客园 - 三生石上(FineUI控件)
D
DataBreaches.Net
L
LangChain Blog
IT之家
IT之家
博客园_首页
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
P
Proofpoint News Feed
Hacker News: Ask HN
Hacker News: Ask HN
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
量子位
Project Zero
Project Zero
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
T
Tenable Blog
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
Microsoft Azure Blog
Microsoft Azure Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 叶小钗
Know Your Adversary
Know Your Adversary
L
Lohrmann on Cybersecurity
C
Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Schneier on Security
Schneier on Security
I
InfoQ
P
Privacy & Cybersecurity Law Blog
Spread Privacy
Spread Privacy
Martin Fowler
Martin Fowler
腾讯CDC
S
Security @ Cisco Blogs
F
Fortinet All Blogs

博客园 - ymworkroom

Python学习——Ai+streamlit实现Ai伴侣(练习流式输出) Python中包的导入 Python中__name__与__all__两个特殊变量的作用 Python中模块导入方式 国内安装Claude方案 连接mysql8.0时报:KeyNotFoundException: 给定关键字不在字典中 vscode中运行的vue项目,vscode关闭后仍然运行,如何停止 [INS-30131] 执行安装程序验证所需的初始设置失败 Java中CornExpression说明 java项目开发常用配置文件模板 oracle数据库导入dmp文件,两种方法 Oracle dmp文件导入(还原)到不同的表空间和不同的用户下 pdf.js在IIS中配置使用笔记 禁止达梦数据库中not null字段插入空字符串 错误:java.lang.NoClassDefFoundError: org/jaxen/JaxenException 服务器级的urn筛选器无效:筛选器必须为空,或服务器属性必须等于实际的服务器名称处理方法 oracle下安装logminer笔记 .net导出图片到Excel .net获取网络图片 Lotus Notes连接Domino服务器时出错 配置Mysql远程访问 mysql Access denied for user root@localhost错误处理备忘 MsSql判断表是否有自增标识 .net读取Lotus Domino文件数据库并写入DataTable中
.net用NPOI生成Word表格
ymworkroom · 2017-04-29 · via 博客园 - ymworkroom

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,后面的被合并的列用ST_Merge.@continue
 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 = ST_Merge.@continue;
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 = ST_Merge.@continue;
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年版的,有需要的自己去下吧