POI操作WORD表格系列--复制表格,填充数据
这两天公司要求用POI生成word模板数据,基本上就是利用WORD书签往指定位置填充数据和表格。按理来说,用freemark会更容易和简单一些,因为POI对WORD的写入实在是不敢恭维。
言归正传,好歹也按要求将报告按模板生成出来了。
首先,归纳几点注意事项:
1.table.addNewRowBetween(int start, int end):在指定范围内插入一行,看上去很美好的方法,实际上是没有实现的,我的poi版本是3.9,如果需要使用这个方法插入行,最好是看一下源码,XWPFTable是否实现了这个方法。
2.table.addRow()和table.addRow(XWPFTableRow row, int pos):前面一个不用说,就是在表格最后一行插入一行,并没有返回值;后一个方法让我栽了大跟头,我起先的理解是在pos的位置插入指定行,这样看来这个方法尤其的实用,特别是在复制行的时候,我想的是直接把表格中要复制的行传入即可,问题就来了,在后面的填充数据时,复制的4行,数据始终填充不进数据。究其原因:还是对象的拷贝问题,addRow中的row是浅拷贝,所以复制出来的行其实都是传入的row对象。
然后,再说复制WORD表格的实现:
上述注意事项已解释为什么不能直接使用addRow来复制表格,所以需要通过自己写代码复制指定行的样式和数据。
public void copy(XWPFTable table,XWPFTableRow sourceRow,int rowIndex){//在表格指定位置新增一行XWPFTableRow targetRow = table.insertNewTableRow(rowIndex);//复制行属性targetRow.getCtRow().setTrPr(sourceRow.getCtRow().getTrPr());List<XWPFTableCell> cellList = sourceRow.getTableCells();if (null == cellList) {return;}//复制列及其属性和内容XWPFTableCell targetCell = null;for (XWPFTableCell sourceCell : cellList) {targetCell = targetRow.addNewTableCell();//列属性targetCell.getCTTc().setTcPr(sourceCell.getCTTc().getTcPr());//段落属性if(sourceCell.getParagraphs()!=null&&sourceCell.getParagraphs().size()>0){ targetCell.getParagraphs().get(0).getCTP().setPPr(sourceCell.getParagraphs().get(0).getCTP().getPPr());if(sourceCell.getParagraphs().get(0).getRuns()!=null&&sourceCell.getParagraphs().get(0).getRuns().size()>0){XWPFRun cellR = targetCell.getParagraphs().get(0).createRun();cellR.setText(sourceCell.getText());cellR.setBold(sourceCell.getParagraphs().get(0).getRuns().get(0).isBold());}else{targetCell.setText(sourceCell.getText());}}else{targetCell.setText(sourceCell.getText());}}
}
POI操作WORD表格系列--复制表格,填充数据相关推荐
- Java POI导出word文件及生成表格
HWPF是处理 Microsoft Word 97(-2007) .doc文件格式,它还为较旧的Word 6和Word 95文件格式提供了有限的只读支持.包含在poi-scratchpad-XXX.j ...
- java使用poi操作word模板,插入图片、段落、表格
java使用poi操作word插入图片.段落.表格 其他链接 准备工作 创建word模板.docx文件 编写模板格式.xml文件 java上手poi maven依赖 使用到的包 具体应用 对应封装方法 ...
- POI操作Word设置表格在字体加粗【XWPFTableCell设置字体】Java操作Word调样式
Jar包的版本号:[不同的版本号也许也可以,可以尝试一下,哈哈哈哈~] ----------因为代码在内网环境中无法复制出来,所以这里就截图了,兄弟们自己敲一下键盘吧~ POI操作Word设置表格在字 ...
- poi设置word表格单元格宽度_xwpftable设置宽度;POI操作Word设置表格宽度
poi 操作word里表格,如设置表格宽度.行高.表格样式等. 1.表格或单元格宽度: 默认TblW的type属性为STTblWidth.AUTO,即自动伸缩.所以要调整为指定类型:STTblWidt ...
- POI操作word填充数据,合并多个word为一个,遇到一些问题的解决
POI操作word填充数据,合并多个word为一个,遇到一些问题的解决 最近搞一个向word模板中替换占位符 填充数据,然后将多个word合并在一起的方法.网上一搜有很多资料,现在在这儿对过程中遇到的 ...
- 【JAVA - POI 合集】之 POI 操作word 图表,柱状图,折线图,雷达图,条形图 poi4.1.2
1.前言 关于poi 操作word 的吐槽: 山路崎岖, 一言难尽啊!!! 原本项目中的poi 版本是3.17的版本,但是3.17对于在word 中操作图表是有问题的.所以对项目的jar 包进行了升级 ...
- 使用poi操作word
导入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifa ...
- 报表技术2(百万数据导入导出,POI操作word)
POI模板导出,操作word 导出用户详情数据(图片,公式处理) 使用模板导出用户详细信息 使用模板引擎 1.编写模板引擎 2.使用模板引擎 百万数据导出 代码实现: 百万数据导入 步骤分析: 1.自 ...
- poi操作word文档总结
POI分段落生成纯Word动态模板并导入数据 导出数据,可以用word另存为xml格式的ftl文件,变量用${变量名}表示,然后在类中通过 freemarker去替换变量. 但是怎么导入word数据. ...
- java word apache poi 操作word模板。
apache poi 操作word模板. 操作方式: 1.对于固定格,可以遍历格子然后替换其中指定的值例如在要替换的cell写入${example} 这样格式,遍历到之后替换. 2.对于需要增长的表格 ...
最新文章
- 五种常用的JavaScript自定义对象方式
- JavaScript实现 按钮不可过频繁使用
- Python程序设计题解【蓝桥杯官网题库】 DAY4【补】-基础练习
- c#垂直投影法_投影学
- 实用 | PyCharm常用快捷键整理
- 实验吧之NSCTF misc250
- P6327 区间加区间sin和 线段树 + 数学
- 爱站CMS综合管理系统源码php版
- Flutter 饼状图、柱状图、拆线图、Flutter动态饼图、Flutter图表 flutter_echart 开发文档
- 自定义UITabBar
- C++编程教程教你如何从零学起(免费高速下载)TXT文档分享
- java day42【综合练习】
- php扩展leonis,LNMP环境部署
- 介绍一款喜欢的产品|产品经理面试题第2篇
- 如何使用光盘启动计算机,电脑如何设置光驱启动 电脑设置光驱启动方法【图文】...
- 阿里云短信服务java发送短信验证码
- 什么是51单片机最小系统?
- 使用谷歌浏览器模拟发送http请求
- python时间序列分析航空旅人_大佬整理的Python数据可视化时间序列案例,建议收藏(附代码)...
- Jenkins系列之——第五章 Jenkins编译一个Spring Boot项目并通过SSH推送到远程