如下图:一个table表格,需要作为表格插入到word中;

1、首先对表格做拆分处理

代码如下:private String simplifyTable(String tableContent) {

if(StringUtils.isEmpty(tableContent)) return null;

Document tableDoc = Jsoup.parse(tableContent);

Elements trElements = tableDoc.getElementsByTag("tr");

if(trElements !=null){

Iterator eleIterator = trElements.iterator();

Integer rowNum = 0;

// 针对于colspan操作

while(eleIterator.hasNext()){

rowNum ++;

Element trElement = eleIterator.next();

//去除所有样式

trElement.removeAttr("class");

Elements tdElements = trElement.getElementsByTag("td");

List tdEleList = covertElements2List(tdElements);

for(int i=0;i

Element curTdElement = tdEleList.get(i);

//去除所有样式

curTdElement.removeAttr("class");

Element ele = curTdElement.clone();

String colspanValStr = curTdElement.attr("colspan");

if(!StringUtils.isEmpty(colspanValStr)){

ele.removeAttr("colspan");

Integer colspanVal = Integer.parseInt(colspanValStr);

for(int k=0;k

curTdElement.after(ele.outerHtml());

}

}

}

}

// 针对于rowspan操作

List trEleList = covertElements2List(trElements);

Element firstTrEle = trElements.first();

Elements tdElements = firstTrEle.getElementsByTag("td");

Integer tdCount = tdElements.size();

for(int i=0;i

for(Element trElement:trEleList){

List tdElementList = covertElements2List(trElement.getElementsByTag("td"));

try{

tdElementList.get(i);

}catch(Exception e){

continue;

}

Node curTdNode = tdElementList.get(i);

Node cNode = curTdNode.clone();

String rowspanValStr = curTdNode.attr("rowspan");

if(!StringUtils.isEmpty(rowspanValStr)){

cNode.removeAttr("rowspan");

Element nextTrElement = trElement.nextElementSibling();

Integer rowspanVal = Integer.parseInt(rowspanValStr);

for(int j=0;j

Node tempNode = cNode.clone();

List nodeList = new ArrayList();

nodeList.add(tempNode);

if(j > 0)

nextTrElement = nextTrElement.nextElementSibling();

Integer indexNum = i+1;

if(i == 0) indexNum = 0;

if(indexNum == tdCount) nextTrElement.appendChild(tempNode);

else nextTrElement.insertChildren(indexNum,nodeList);

}

}

}

}

}

Element tableEle = tableDoc.getElementsByTag("table").first();

String tableHtml = tableEle.outerHtml();

return tableHtml;

}

private static List covertElements2List(Elements curElements){

List elementList = new ArrayList();

Iterator eleIterator = curElements.iterator();

while(eleIterator.hasNext()){

Element curlement = eleIterator.next();

elementList.add(curlement);

}

return elementList;

}

处理后的表格会稍有变形,如下图:

2、将处理后的表格写入wordString tableHtmlStr = ele.outerHtml();

System.out.println(tableHtmlStr);

String simpleTableHtml = simplifyTable(tableHtmlStr);

System.out.println(simpleTableHtml);

Document tableDoc = Jsoup.parse(simpleTableHtml);

Elements trList = tableDoc.getElementsByTag("tr");

Elements tdList = trList.get(0).getElementsByTag("td");

XWPFTable xwpfTable = document.createTable(trList.size(),tdList.size());

Map[][] array = new Map[trList.size()][tdList.size()];

for (int row = 0; row

Element trElement = trList.get(row);

Elements tds = trElement.getElementsByTag("td");

for(int col = 0; col

Element colElement = tds.get(col);

String colspan = colElement.attr("colspan");

String rowspan = colElement.attr("rowspan");

String style = colElement.attr("style");

StringBuilder styleSB = new StringBuilder();

if(!StringUtils.isEmpty(colspan)){

int colCount = Integer.parseInt(colspan);

for(int i=0;i

array[row][col+i+1] = new HashMap();

array[row][col+i+1].put("mergeCol", true);

}

}

if(!StringUtils.isEmpty(rowspan)){

int rowCount = Integer.parseInt(rowspan);

for(int i=0;i

array[row+i+1][col] = new HashMap();

array[row+i+1][col].put("mergeRow", true);

}

}

XWPFTableCell tableCell = xwpfTable.getRow(row).getCell(col);

if(StringUtils.isEmpty(colspan)){

if(col == 0){

if(tableCell.getCTTc().getTcPr() == null){

tableCell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);

}else{

if(tableCell.getCTTc().getTcPr().getHMerge() == null){

tableCell.getCTTc().getTcPr().addNewHMerge().setVal(STMerge.RESTART);

}else{

tableCell.getCTTc().getTcPr().getHMerge().setVal(STMerge.RESTART);

}

}

}else{

if(array[row][col]!=null && array[row][col].get("mergeCol")!=null && array[row][col].get("mergeCol")){

if(tableCell.getCTTc().getTcPr() == null){

tableCell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);

}else{

if(tableCell.getCTTc().getTcPr().getHMerge() == null){

tableCell.getCTTc().getTcPr().addNewHMerge().setVal(STMerge.CONTINUE);

}else{

tableCell.getCTTc().getTcPr().getHMerge().setVal(STMerge.CONTINUE);

}

}

continue;

}else{

if(tableCell.getCTTc().getTcPr() == null){

tableCell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);

}else{

if(tableCell.getCTTc().getTcPr().getHMerge() == null){

tableCell.getCTTc().getTcPr().addNewHMerge().setVal(STMerge.RESTART);

}else{

tableCell.getCTTc().getTcPr().getHMerge().setVal(STMerge.RESTART);

}

}

}

}

}else{

if(tableCell.getCTTc().getTcPr() == null){

tableCell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);

}else{

if(tableCell.getCTTc().getTcPr().getHMerge() == null){

tableCell.getCTTc().getTcPr().addNewHMerge().setVal(STMerge.RESTART);

}else{

tableCell.getCTTc().getTcPr().getHMerge().setVal(STMerge.RESTART);

}

}

}

if(StringUtils.isEmpty(rowspan)){

if(array[row][col]!=null && array[row][col].get("mergeRow")!=null && array[row][col].get("mergeRow")){

if(tableCell.getCTTc().getTcPr() == null){

tableCell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);

}else{

if(tableCell.getCTTc().getTcPr().getVMerge() == null){

tableCell.getCTTc().getTcPr().addNewVMerge().setVal(STMerge.CONTINUE);

}else{

tableCell.getCTTc().getTcPr().getVMerge().setVal(STMerge.CONTINUE);

}

}

continue;

}else{

if(tableCell.getCTTc().getTcPr() == null){

tableCell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);

}else{

if(tableCell.getCTTc().getTcPr().getVMerge() == null){

tableCell.getCTTc().getTcPr().addNewVMerge().setVal(STMerge.RESTART);

}else{

tableCell.getCTTc().getTcPr().getVMerge().setVal(STMerge.RESTART);

}

}

}

}else{

if(tableCell.getCTTc().getTcPr() == null){

tableCell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);

}else{

if(tableCell.getCTTc().getTcPr().getVMerge() == null){

tableCell.getCTTc().getTcPr().addNewVMerge().setVal(STMerge.RESTART);

}else{

tableCell.getCTTc().getTcPr().getVMerge().setVal(STMerge.RESTART);

}

}

}

tableCell.removeParagraph(0);

XWPFParagraph paragraph = tableCell.addParagraph();

paragraph.setStyle(styleSB.toString());

if(!StringUtils.isEmpty(style) && style.contains("text-align:center")){

paragraph.setAlignment(ParagraphAlignment.CENTER);

}

XWPFRun run = paragraph.createRun();

run.setText(colElement.text());

}

}

写入word后表格如下图:

注:上述内容处理的表格为html代码的table表格

本文出自 “BrightAries” 博客,谢绝转载!

原文:http://brightaries.blog.51cto.com/13167995/1982329

java 导出word 含表格_poi 导出word,导出表格(复杂表格合并行列)解决方法相关推荐

  1. 为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?解决方法如下

    为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?解决方法如下 参考文章: (1)为什么ArcGIS 10.3导出 Shapefile的字段名会被截断成3个汉字?解决方法 ...

  2. Idea导出jar包运行报错:找不到主清单属性解决方法

    Idea导出jar包运行报错:找不到主清单属性解决方法 参考文章: (1)Idea导出jar包运行报错:找不到主清单属性解决方法 (2)https://www.cnblogs.com/stars-on ...

  3. ppt图片在word中不能正常显示,只显示为矩形框的解决方法

    ppt图片在word中不能正常显示,只显示为矩形框的解决方法 参考文章: (1)ppt图片在word中不能正常显示,只显示为矩形框的解决方法 (2)https://www.cnblogs.com/ga ...

  4. 上传word文档显示服务器出错,打开office出错的几种解决方法

    打开office出错的几种解决方法 互联网   发布时间:2008-10-04 19:36:44   作者:佚名   我要评论 打开Office出错,比如无法打开Office文件.无法打开有密码保护的 ...

  5. word没有显示endnote_Word2007或2010未显示EndNote工具条的解决方法 | 科研动力

    Word 2007或2010未显示EndNote工具条的解決方法:1.修复安装:2.修改加载项:3.管理加载中心. 有时在Word 2007/ 2010可能会不显示EndNote工具条,造成这种情况最 ...

  6. 家庭和学生版2021插入Word的Visio图打不开显示unknown对象求解——--->解决方法visio unknown(亲测有效)

    找到网上的方法都不管用,如: 改文件打开方式,我的本来就是. ​​​​​​Word文件中嵌入的Visio文件显示为unknown对象解决方式_ataberman的博客-CSDN博客_visio无法编辑 ...

  7. 解决word保存后再打开,页眉多出横线的解决方法(非删除横线方法)

    问题描述 对word文档进行编辑,编辑后保存.保存前并未对页眉进行编辑,页眉没有任何内容. 但是再次打开该文档后,每页都多出了一个横线页眉: 网上的方法都是治标不治本,只是教给你如何把横线去掉,但是下 ...

  8. java安装有错误码咋办_java编程出现的错误对应的解决方法

    error: could not open D:\java\jre1.8\lib\amd64\jvm.cfg 解决方法:把java的环境变量%JAVA_HOME%/bin上移到最上面 优化 查看网页源 ...

  9. java 图片上写字_java 在图片上写字,两个图片合并的实现方法

    实例如下: package writeimg; import javax.imageio.ImageIO; import java.awt.Color; import java.awt.Font; i ...

  10. java silk转mp3_微信小程序录音文件格式silk遇到的问题及解决方法

    不好意思,误导大家了,这种将silk解密的方式只是在小程序测试的时候可以,上线以后这种方法是不行的,还是需要使用解密转码.参见:https://github.com/kn007/silk-v3-dec ...

最新文章

  1. linux主题文件,美化你的Linux!23个精美Ubuntu主题下载
  2. Windows下 VS2015编译boost1.62
  3. 同一个项目相互调接口_408计算机网络D3-第二章:网络体系结构与参考模型(上)分层结构-协议-接口-服务...
  4. 如何跨域来同步不同网站之间的Cookie
  5. OCR文本检测-RRPN
  6. 日志对服务器压力,服务器一大堆错误日志的解决方法
  7. ASA 5505 配置
  8. 数据库入门级学习(1)
  9. CPU测评程序、指标、工具
  10. 服务器win2003系统升级,Windows server 2003 升级 到2008 R2
  11. mysql查看sa密码_sqlserver怎么查看sa密码
  12. 在使用vue脚手架之前你必须掌握的:vue的模版以及路由用法
  13. sqoop 导出hive数据到MySQL数据库当中
  14. c中纠结不清的点(1)
  15. 基于 CentOS 搭建微信小程序服务
  16. SpringBoot调用SAP接口(搭建部署)
  17. 做过SEO优化的网站与普通站的区别在哪里
  18. rust 局域网联机_腐蚀怎么进行局域网联机方式 酷跑加速器和你畅玩游戏世界
  19. 计算机与化学相关论文,计算机与化学论文写作.doc
  20. 计算机网络电话线上网原理,电话线网桥的构造和原理

热门文章

  1. 吃货贴 | 「咸、甜、辣」如何影响肠道菌群?
  2. Win10添加右键菜单以管理员方式打开cmd命令行
  3. 用什么来做用户行为分析?七个实用工具推荐给你
  4. 修改植物大战僵尸阳关代码
  5. Web项目经理手册之项目经理需要铭记在心的话
  6. TensorFlow 1.x 深度学习秘籍:1~5
  7. java与模式pdf 闫宏_Java设计模式及实践.pdf下载
  8. java中金额转换精度问题
  9. 基于RFID技术下的化工厂定位系统,包含化工厂人员定位解决方案-新导智能
  10. python使用aip库识别图片中文字