您的位置:首页 > Web前端 > HTML

POI操作Word中表格 转html的table时解决横跨colspan

2012-07-03 15:49 597 查看
在将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还没有解决,希望知道的给我留言
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐