在将word按要求转成html时。并且css样式跟文档要一致
碰到了表格时,百度了好久,没见到有解决POI读取word中表格转成html的表格解决横跨的
自己也尝试了好久,
TableRow tr = tb.getRow(i);
tr.getRowHeight();
TableCell td = tr.getCell(j);//取得单元格
TableRow没有提供宽度,而且我用for循环得到所有单元格宽度相加,发现得到结果匪夷所思
后来一想,觉得是word中表格宽度是随着单元格中内容变化,因而没有提供这样的方法。
后来我无意中发现一个TableCell提供了一个td.getLeftEdge()这个方法,得到的是每行中单元格离最左边的距离
我也发现这些距离是固定了,于是可以根据这些距离确定每个单元格的次序,觉得横跨多少
Map<Integer,Integer> cellIndexMapping=new HashMap<Integer,Integer>();int maxNumCellIndex=0;//单元格最多的哪一行
int columns=0;
for (int i = 0; i < tb.numRows(); i++) {
TableRow tr = tb.getRow(i);
if(columns<tr.numCells()){
maxNumCellIndex=i;
columns=tr.numCells();
}
}
for (int j = 0; j < columns; j++) {
TableCell td = tb.getRow(maxNumCellIndex).getCell(j);//取得单元格
System.out.println("ddddddddddddddd"+td.getLeftEdge());
cellIndexMapping.put(td.getLeftEdge(),j+1);
}
for (int i = 0; i < tb.numRows(); i++) {
TableRow tr = tb.getRow(i);
htmlTextTable+="<tr>";
for (int j = 0; j < tr.numCells(); j++) {
TableCell td = tr.getCell(j);//取得单元格
TableCell td2;//取得下一个单元格
td.getWidth();
if(j== tr.numCells()-1){
td2 = tr.getCell(j);
}else{
td2 = tr.getCell(j+1);
}
//获取横跨colspan
int td1_edge=td.getLeftEdge();
int td2_edge=td2.getLeftEdge();
int td1_index=cellIndexMapping.get(td1_edge).intValue();
int td2_index=cellIndexMapping.get(td2_edge).intValue();
int span=td2_index-td1_index;
//解决最后一个单元格跨行到最结尾
if(tr.numCells()<columns&&j==tr.numCells()-1){
span=columns-tr.numCells()+1;
}
这时span就是横跨的数值 htmlTextTable+="<td colspan="+span+">";
还有一种方式,效果更好
就是得到所有单元格的宽度,然后求他们的最大公约数value
以后每个单元格的colspan=tableCell.getWidth()/value;即可
但是纵跨rowspan还没有解决,希望知道的给我留言