这两天公司要求用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表格系列--复制表格,填充数据相关推荐

  1. Java POI导出word文件及生成表格

    HWPF是处理 Microsoft Word 97(-2007) .doc文件格式,它还为较旧的Word 6和Word 95文件格式提供了有限的只读支持.包含在poi-scratchpad-XXX.j ...

  2. java使用poi操作word模板,插入图片、段落、表格

    java使用poi操作word插入图片.段落.表格 其他链接 准备工作 创建word模板.docx文件 编写模板格式.xml文件 java上手poi maven依赖 使用到的包 具体应用 对应封装方法 ...

  3. POI操作Word设置表格在字体加粗【XWPFTableCell设置字体】Java操作Word调样式

    Jar包的版本号:[不同的版本号也许也可以,可以尝试一下,哈哈哈哈~] ----------因为代码在内网环境中无法复制出来,所以这里就截图了,兄弟们自己敲一下键盘吧~ POI操作Word设置表格在字 ...

  4. poi设置word表格单元格宽度_xwpftable设置宽度;POI操作Word设置表格宽度

    poi 操作word里表格,如设置表格宽度.行高.表格样式等. 1.表格或单元格宽度: 默认TblW的type属性为STTblWidth.AUTO,即自动伸缩.所以要调整为指定类型:STTblWidt ...

  5. POI操作word填充数据,合并多个word为一个,遇到一些问题的解决

    POI操作word填充数据,合并多个word为一个,遇到一些问题的解决 最近搞一个向word模板中替换占位符 填充数据,然后将多个word合并在一起的方法.网上一搜有很多资料,现在在这儿对过程中遇到的 ...

  6. 【JAVA - POI 合集】之 POI 操作word 图表,柱状图,折线图,雷达图,条形图 poi4.1.2

    1.前言 关于poi 操作word 的吐槽: 山路崎岖, 一言难尽啊!!! 原本项目中的poi 版本是3.17的版本,但是3.17对于在word 中操作图表是有问题的.所以对项目的jar 包进行了升级 ...

  7. 使用poi操作word

    导入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifa ...

  8. 报表技术2(百万数据导入导出,POI操作word)

    POI模板导出,操作word 导出用户详情数据(图片,公式处理) 使用模板导出用户详细信息 使用模板引擎 1.编写模板引擎 2.使用模板引擎 百万数据导出 代码实现: 百万数据导入 步骤分析: 1.自 ...

  9. poi操作word文档总结

    POI分段落生成纯Word动态模板并导入数据 导出数据,可以用word另存为xml格式的ftl文件,变量用${变量名}表示,然后在类中通过 freemarker去替换变量. 但是怎么导入word数据. ...

  10. java word apache poi 操作word模板。

    apache poi 操作word模板. 操作方式: 1.对于固定格,可以遍历格子然后替换其中指定的值例如在要替换的cell写入${example} 这样格式,遍历到之后替换. 2.对于需要增长的表格 ...

最新文章

  1. 五种常用的JavaScript自定义对象方式
  2. JavaScript实现 按钮不可过频繁使用
  3. Python程序设计题解【蓝桥杯官网题库】 DAY4【补】-基础练习
  4. c#垂直投影法_投影学
  5. 实用 | PyCharm常用快捷键整理
  6. 实验吧之NSCTF misc250
  7. P6327 区间加区间sin和 线段树 + 数学
  8. 爱站CMS综合管理系统源码php版
  9. Flutter 饼状图、柱状图、拆线图、Flutter动态饼图、Flutter图表 flutter_echart 开发文档
  10. 自定义UITabBar
  11. C++编程教程教你如何从零学起(免费高速下载)TXT文档分享
  12. java day42【综合练习】
  13. php扩展leonis,LNMP环境部署
  14. 介绍一款喜欢的产品|产品经理面试题第2篇
  15. 如何使用光盘启动计算机,电脑如何设置光驱启动 电脑设置光驱启动方法【图文】...
  16. 阿里云短信服务java发送短信验证码
  17. 什么是51单片机最小系统?
  18. 使用谷歌浏览器模拟发送http请求
  19. python时间序列分析航空旅人_大佬整理的Python数据可视化时间序列案例,建议收藏(附代码)...
  20. Jenkins系列之——第五章 Jenkins编译一个Spring Boot项目并通过SSH推送到远程

热门文章

  1. 百度信息流 绑定服务器,百度信息流账户怎么搭建?百度信息流账户搭建教程...
  2. 什么叫主语、谓语、宾语、定语、状语、补语?
  3. python识别图片表格内容
  4. MAYA安装未完成,某些产品无法安装的解决方法
  5. 江苏开票系统安全接入服务器地址,江苏省增值税发票查询平台网址.doc
  6. java 线程 假死_JVM假死问题如何定位?
  7. 汇编语言基础知识(二)
  8. 【L2TP】L2TP IPsec设置
  9. 2019互联网+直播平台开发如何发展?
  10. dtech串口驱动 linux,帝特USB转串口驱动