900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > java 导出word 含表格_poi 导出word 导出表格(复杂表格合并行列)解决方法

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

时间:2024-01-06 20:26:39

相关推荐

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

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

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

代码如下:privateStringsimplifyTable(StringtableContent){

if(StringUtils.isEmpty(tableContent))returnnull;

DocumenttableDoc=Jsoup.parse(tableContent);

ElementstrElements=tableDoc.getElementsByTag("tr");

if(trElements!=null){

IteratoreleIterator=trElements.iterator();

IntegerrowNum=0;

//针对于colspan操作

while(eleIterator.hasNext()){

rowNum++;

ElementtrElement=eleIterator.next();

//去除所有样式

trElement.removeAttr("class");

ElementstdElements=trElement.getElementsByTag("td");

ListtdEleList=covertElements2List(tdElements);

for(inti=0;i

ElementcurTdElement=tdEleList.get(i);

//去除所有样式

curTdElement.removeAttr("class");

Elementele=curTdElement.clone();

StringcolspanValStr=curTdElement.attr("colspan");

if(!StringUtils.isEmpty(colspanValStr)){

ele.removeAttr("colspan");

IntegercolspanVal=Integer.parseInt(colspanValStr);

for(intk=0;k

curTdElement.after(ele.outerHtml());

}

}

}

}

//针对于rowspan操作

ListtrEleList=covertElements2List(trElements);

ElementfirstTrEle=trElements.first();

ElementstdElements=firstTrEle.getElementsByTag("td");

IntegertdCount=tdElements.size();

for(inti=0;i

for(ElementtrElement:trEleList){

ListtdElementList=covertElements2List(trElement.getElementsByTag("td"));

try{

tdElementList.get(i);

}catch(Exceptione){

continue;

}

NodecurTdNode=tdElementList.get(i);

NodecNode=curTdNode.clone();

StringrowspanValStr=curTdNode.attr("rowspan");

if(!StringUtils.isEmpty(rowspanValStr)){

cNode.removeAttr("rowspan");

ElementnextTrElement=trElement.nextElementSibling();

IntegerrowspanVal=Integer.parseInt(rowspanValStr);

for(intj=0;j

NodetempNode=cNode.clone();

ListnodeList=newArrayList();

nodeList.add(tempNode);

if(j>0)

nextTrElement=nextTrElement.nextElementSibling();

IntegerindexNum=i+1;

if(i==0)indexNum=0;

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

elsenextTrElement.insertChildren(indexNum,nodeList);

}

}

}

}

}

ElementtableEle=tableDoc.getElementsByTag("table").first();

StringtableHtml=tableEle.outerHtml();

returntableHtml;

}

privatestaticListcovertElements2List(ElementscurElements){

ListelementList=newArrayList();

IteratoreleIterator=curElements.iterator();

while(eleIterator.hasNext()){

Elementcurlement=eleIterator.next();

elementList.add(curlement);

}

returnelementList;

}

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

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

System.out.println(tableHtmlStr);

StringsimpleTableHtml=simplifyTable(tableHtmlStr);

System.out.println(simpleTableHtml);

DocumenttableDoc=Jsoup.parse(simpleTableHtml);

ElementstrList=tableDoc.getElementsByTag("tr");

ElementstdList=trList.get(0).getElementsByTag("td");

XWPFTablexwpfTable=document.createTable(trList.size(),tdList.size());

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

for(introw=0;row

ElementtrElement=trList.get(row);

Elementstds=trElement.getElementsByTag("td");

for(intcol=0;col

ElementcolElement=tds.get(col);

Stringcolspan=colElement.attr("colspan");

Stringrowspan=colElement.attr("rowspan");

Stringstyle=colElement.attr("style");

StringBuilderstyleSB=newStringBuilder();

if(!StringUtils.isEmpty(colspan)){

intcolCount=Integer.parseInt(colspan);

for(inti=0;i

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

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

}

}

if(!StringUtils.isEmpty(rowspan)){

introwCount=Integer.parseInt(rowspan);

for(inti=0;i

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

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

}

}

XWPFTableCelltableCell=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);

XWPFParagraphparagraph=tableCell.addParagraph();

paragraph.setStyle(styleSB.toString());

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

paragraph.setAlignment(ParagraphAlignment.CENTER);

}

XWPFRunrun=paragraph.createRun();

run.setText(colElement.text());

}

}

写入word后表格如下图:

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

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

原文:http://brightaries./13167995/1982329

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。