在使用NPOI操作制作word数据模板时,需要在word中插入表格,包括合并单元格的方式

图例:

1,没有合并单元的方式创建表格,这种方式是提前创建好所需要的表格,然后再往里面填数

XWPFDocument doc= new XWPFDocument();
//创建表格-提前创建好表格后填数
XWPFTable tableContent = doc.CreateTable(4, 5);//4行5列
tableContent.Width = 1000 * 5;
tableContent.SetColumnWidth(0, 1000);/* 设置列宽 */
tableContent.SetColumnWidth(1, 1500);
tableContent.SetColumnWidth(2, 1500);
tableContent.SetColumnWidth(3, 1000);tableContent.GetRow(0).GetCell(0).SetParagraph(SetCellText(doc, tableContent, "地点"));
tableContent.GetRow(0).GetCell(1).SetParagraph(SetCellText(doc, tableContent, "日期"));
tableContent.GetRow(0).GetCell(2).SetParagraph(SetCellText(doc, tableContent, "男性"));
tableContent.GetRow(0).GetCell(3).SetParagraph(SetCellText(doc, tableContent, "女性"));
tableContent.GetRow(0).GetCell(4).SetParagraph(SetCellText(doc, tableContent, "合计"));//测试数据格式
//string[,] siblings = new string[3, 5] { { "航天桥", "-", "0", "0", "0" }, { "马甸", "-", //"0", "0", "0" }, { "洋桥", "04月16日 - 05月31日", "0", "0", "0" } };
//List<ArrayList> list=Common.PubVars.listTable;
for (int i = 0; i < list.Count;i++)//有3个数组
{  ArrayList ls=list[i];for (int j = 0; j < ls.Count;j++){tableContent.GetRow(i + 1).GetCell(j).SetParagraph(SetCellText(doc, tableContent, ls[j].ToString()));}
}
//设置字体样式public XWPFParagraph SetCellText(XWPFDocument doc, XWPFTable table, string setText){//table中的文字格式设置  CT_P para = new CT_P();XWPFParagraph pCell = new XWPFParagraph(para, table.Body);pCell.Alignment = ParagraphAlignment.CENTER;//字体居中  pCell.VerticalAlignment = TextAlignment.CENTER;//字体居中  XWPFRun r1c1 = pCell.CreateRun();r1c1.SetText(setText);r1c1.FontSize = 12;r1c1.FontFamily = "华文楷体";//r1c1.SetTextPosition(20);//设置高度  return pCell;}

2,合并单元格的方式,这种方式需要一行一行的创建并操作合并,填入数据,

//数据样例//string[,] siblings = new string[10, 7] { //{ "1", "test1", "0", "0", "0","0","0" },//{ "2", "test2", "0", "0", "0","0", "0" }, //{ "3", "test3", "0", "0", "0","0", "0"},//{ "4", "test4", "0", "0", "0","0", "0"},//{ "5", "test5", "0", "0", "0","0", "0"},//{ "6", "test6", "0", "0", "0","0", "0"},//{ "7", "test7", "0", "0", "0","0", "0"},//{ "8", "test8", "0", "0", "0","0", "0"},//{ "9", "test9", "0", "0", "0","0", "0"},//{ "10","test10", "0", "0", "0","0", "0"}, //};
List<ArrayList> listYcTable=new List<ArrayList>();int rows = list.Count;
int col = 0;
foreach (ArrayList al in list)
{col = al.Count;//列数
}
//创建表格
XWPFTable table = doc.CreateTable(1, col);//思路,数据一行一行画
table.RemoveRow(0);//去掉第一行空白的
table.Width = 1000 * 5;
table.SetColumnWidth(0, 300);/* 设置列宽 */
table.SetColumnWidth(1, 1200);for (int i = 0; i < col - 3; i++){table.SetColumnWidth(2 + i, 800);/* 设置列宽 */}
table.SetColumnWidth(col - 1, 700);CT_Row nr = new CT_Row();
XWPFTableRow mr = new XWPFTableRow(nr, table);//创建行
table.AddRow(mr);//将行添加到table中 XWPFTableCell c1 = mr.CreateCell();//创建单元格
CT_Tc ct = c1.GetCTTc();
CT_TcPr cp = ct.AddNewTcPr();//第1行
cp.AddNewVMerge().val = ST_Merge.restart;//合并行
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = "序号";c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();cp.AddNewVMerge().val = ST_Merge.restart;//合并行
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = "指标名称";c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
cp.gridSpan = new CT_DecimalNumber();
cp.gridSpan.val = Convert.ToString(col - 3); //合并列
cp.AddNewVAlign().val = ST_VerticalJc.center;
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
ct.GetPList()[0].AddNewR().AddNewT().Value = "年龄段";c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();cp.AddNewVMerge().val = ST_Merge.restart;//合并行
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = "合计";//=====第一行表头结束=========//2行,多行合并类似
nr = new CT_Row();
mr = new XWPFTableRow(nr, table);
table.AddRow(mr);c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
cp.AddNewVMerge().val = ST_Merge.@continue;//合并行 序号c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
cp.AddNewVMerge().val = ST_Merge.@continue;//合并行 指标名称
//年龄段分组
//["20岁以下","21-30","31-40","41-50","51-60","70岁以上"]
ArrayList alAge = Common.PubVars.ageGroup;//年龄段数组
for (int i = 0; i < alAge.Count; i++){mr.CreateCell().SetText(Convert.ToString(alAge[i]));//年龄段单元格}
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
cp.AddNewVMerge().val = ST_Merge.@continue;//合并行 合计//====第二行要合并的
for (int i = 0; i < list.Count; i++){//创建一行nr = new CT_Row();mr = new XWPFTableRow(nr, table);table.AddRow(mr);for (int j = 0; j < list[i].Count; j++){
//每一行创建对应的数据
mr.CreateCell().SetText(list[i][j].ToString());
// table.GetRow(i + 1).GetCell(j).SetParagraph(SetCellText(doc, table, list[i][j].ToString()));}
} 

合并单元格有跨列合并,和跨行分部,两个关键点:

跨列合并

cp.gridSpan = new CT_DecimalNumber();//实例化数字必须
cp.gridSpan.val = “3”; //合并列  合并3列

跨行合并

cp.AddNewVMerge().val = ST_Merge.restart;//合并行--开始行
cp.AddNewVMerge().val = ST_Merge.@continue;//合并行--到合并行
//合并的单元格--边创建边合并

收集的使用NPOI操作word的文档,还是比较适用的文档 https://download.csdn.net/download/dengxt/10823924

NPOI版本是 https://download.csdn.net/download/dengxt/10824550

NPOI 在word中插入 表格 包括 合并单元格相关推荐

  1. jacob 模板生成word文档 表格(合并单元格以及各种表格样式)、图片

    一.将 jacob-1.18-M2-x64.dll 文件 放在jdk bin目录下 二.项目中导入jacob.jar 包 三.设置好模板内容 四.测试代码 /*** 主方法测试* @param arg ...

  2. Gitbook/Markdown中插入复杂(合并单元格)的表格

    由于Markdown语法本身不包含复杂表格的插入,因此gitbook也是不直接支持的,但是可以使用html语法来实现,一般的markdown编辑器都是支持html语法的. 复杂表格与简单表格最大的差异 ...

  3. WPS中插入表格,每个单元格自动编号问题解决

    在文档编写的过程中,采用"项目符号"标记相关节点是非常通用的做法.但是,在项目符号下,插入一个表格,会自动编号.怎么取消呢? 其实很简单,全选这个表格,点击"开始&quo ...

  4. 计算机绘制表格教案,word中插入表格教案

    篇一:word中插入表格教学反思 <Word表格的制作>教学反思 计算机课程对于培养学生的科学精神.创新精神和实践能力,提高学生对信息社会的适应能力等方面都具有重要的意义.在计算机课的教学 ...

  5. word课程表设置符号与编号_6上 第1课 我的课程表——word中插入表格教案.doc

    6上 第1课 我的课程表--word中插入表格教案.doc 还剩 4页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 1制 作 我 的 课 程 表 -- ...

  6. SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格、合并单元格)

    本编文章继SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格)文章之后 介绍Poi-tl导出word的延伸功能: 所需依赖以及word模板所属位置 见 SpringBoo ...

  7. 在Excel表格中如何快速拆分合并单元格

    在Excel表格中如何快速拆分合并单元格 目录 在Excel表格中如何快速拆分合并单元格 1.例如:将销售人列中的合并单元格拆分还原 2.选中销售人姓名,点击[开始]选项卡中[合并居中] 3.再点击[ ...

  8. python合并word表格单元格_python docx模块读取word表格遇到合并单元格时的处理

    python docx模块读取word表格遇到合并单元格时的处理 python docx模块读取word表格遇到合并单元格时的处理 python docx模块读取word表 遇到合并单元格时的处理 通 ...

  9. html表格怎么纵向合并单元格,在html中表格如何合并单元格

    在html中表格如何合并单元格 发布时间:2020-04-28 10:55:12 来源:亿速云 阅读:777 作者:小新 这篇文章主要为大家详细介绍了在html中表格如何合并单元格,文中示例代码介绍的 ...

  10. html合并单元格怎么把字竖着,电脑excel单元格中文字如何在合并单元格后竖排显示...

    电脑excel单元格中文字如何在合并单元格后竖排显示 excel软件是我们现在经常使用的数据处理工具之一,接下来小编就教大家怎样在软件中设置合并单元格之后竖排显示文字. 具体如下: 1. 首先我们需要 ...

最新文章

  1. 022_jdbc-mysql封装JDBCUtil和抽取数据库配置参数文件
  2. Python 最佳实践
  3. 【Python CheckiO 题解】Best Stock
  4. 经济下行,我们该如何避免焦虑?
  5. 2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路
  6. NodeJs之npm
  7. oracle数据库导dump,oracle数据导入,导出dump文件
  8. ApiPost 测试工具
  9. linux crontab测试,crontab使用测试
  10. 51单片机学习笔记(7)——74HC138三八译码器
  11. 计算机 系统 声音问题 有回声
  12. 【目标检测】11、Region Proposal by Guided Anchoring
  13. android 面试题(史上最全)
  14. 第三篇,网络层的IP协议
  15. Linux安装和使用Xftp6和Xshell6教程
  16. c语言订餐系统项目范例,C语言订餐系统.doc
  17. 4月22日丨【云数据库技术沙龙】技术进化,让数据更智能
  18. 近视?老花眼?恢复视力,就用这一招!
  19. Java 自学路线图之 Java 进阶自学
  20. Java数据结构之图

热门文章

  1. 面试常考题——LRU缓存题解
  2. 算法竞赛进阶指南 激光炸弹
  3. c语言字符串atoi函数,C++_C语言中一些将字符串转换为数字的函数小结,C语言atoi()函数:将字符串转换 - phpStudy...
  4. 生成对抗网络 Generative Adversarial Nets(GAN)详解
  5. Stata:数据包络分析(DEA)
  6. python 求和_python pandas行、列求和及累加求和
  7. 物联网毕设选题 - 单片机智能红外测温系统(物联网 stm32 远程wifi)
  8. Wannacry浅析
  9. 平安科技表格识别——原理解读
  10. 既是老师又是师兄的临别箴言 .