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还没有解决,希望知道的给我留言
碰到了表格时,百度了好久,没见到有解决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还没有解决,希望知道的给我留言
相关文章推荐
- 【HTML】table表格拆分合并(colspan、rowspan)
- poi导入xls表格老版本问题解决,写入文件,删除文件操作
- 【HTML】【CSS】表格设置了table-layout:fixed后第一行合并单元格其下单元格宽度设置不起作用的解决方法
- POI操作Word2013,表格与段落读写。
- [HTML]表格Table宽度设置无效的解决方法
- table表格合并列的问题,在IE中能够正常显示,但是在火狐中,好像colspan没有起作用一样,解决办法!!!!
- 网页表格表头固定并可以自由拉伸列头的问题解决 (完美方案_html_table_seo)
- POI XWPF 操作word并操作表格
- java实现在线预览----poi操作word转html及03、07版本兼容问题
- poi操作表格table
- html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式
- 使用jQuery操作HTML的table表格的实例解析
- 解决 HTML 转到 XHTML 中,表格(Table)不能居中的问题。align="center" 过时问题
- POI操作word在标签位置插入表格
- table表格js简单操作隐藏与显示出现结构错乱解决方法
- 解决 apache poi 转换 word(docx) 文件到 html 文件表格没边框的问题
- poi 导出word,导出表格(复杂表格合并行列)解决方法
- 【HTML】【CSS】表格设置了table-layout:fixed后第一行合并单元格其下单元格宽度设置不起作用的解决方法
- apache poi操作office文档---- POI Word DOC格式转Html
- iText7根据html表格(table)代码生成表格、解决跨行跨列问题