如下图:一个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