博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用POI创建word表格合并单元格兼容wps
阅读量:6358 次
发布时间:2019-06-23

本文共 2207 字,大约阅读时间需要 7 分钟。

poi创建word表格合并单元格代码如下:

/**      * @Description: 跨列合并      */      public  void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) {          for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) {              XWPFTableCell cell = table.getRow(row).getCell(cellIndex);              if ( cellIndex == fromCell ) {                  // The first merged cell is set with RESTART merge value                  cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);              } else {                  // Cells which join (merge) the first one, are set with CONTINUE                  cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);              }          }      }
/**      * @Description: 跨行合并      * @see http://stackoverflow.com/questions/24907541/row-span-with-xwpftable      */      public  void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {          for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {              XWPFTableCell cell = table.getRow(rowIndex).getCell(col);              if ( rowIndex == fromRow ) {                  // The first merged cell is set with RESTART merge value                  cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);              } else {                  // Cells which join (merge) the first one, are set with CONTINUE                  cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);              }          }      }

但是以上方法在wps中不兼容,wps跨列合并单元格后会出现一些问题。如图所示:

而在office中的正确结果(我想要的)如下所示

这是由于我设置了表格列宽自动分割:

// 列宽自动分割        CTTblWidth width = table.getCTTbl().addNewTblPr().addNewTblW();        width.setType(STTblWidth.DXA);        width.setW(BigInteger.valueOf(9072));

导致在wps中第一行虽然合并了“纸媒”、“新媒体”单元格,但由于设置了列宽自动分割,致使在wps中单元格竖线没有对齐,而是均匀的分成了三个列宽相同的单元格。

解决办法如下:设置合并的单元格的宽度(“纸媒”、“新媒体”单元格),则在wps中竖线就对上了。

//设置合并单元格的大小//rowNum:合并的单元格所在行号  fromCellNum:合并的起始单元格  toCellNum:合并的结束单元格  9072:列宽总大小(我写死了9072)  columnNum:表格总列数 table.getRow(rowNum).getCell(fromCellNum).getCTTc().addNewTcPr().addNewTcW()       .setW(BigInteger.valueOf((9072 / columnNum) * (toCellNum - fromCellNum + 1)));

 

转载于:https://www.cnblogs.com/fengbing9891/p/10030666.html

你可能感兴趣的文章
MFC对话框编程-图片控件
查看>>
nodejs启动webserver服务
查看>>
小偷被抓叫嚣:我不偷警察没饭吃
查看>>
python初学—-实现excel里面读数据进行排序
查看>>
用户体验升级后 “谁行谁上”让百度Q4财报更有底气
查看>>
直播相关学习链接
查看>>
使用RPM包工具和源码包编译安装Linux应用程序
查看>>
VoIP——开启免费通话新时代的先锋
查看>>
Linux下rsync的用法
查看>>
apache虚拟主机、日志轮询、日志统计、去版本优化
查看>>
java代码实现开启openoffice服务和关闭sffice.exe进程
查看>>
docker镜像的使用方法
查看>>
提升HTTPS安全评级
查看>>
iOS开发过程中的心得
查看>>
QOS配置命令
查看>>
使用 MPI for Python 并行化遗传算法
查看>>
widget
查看>>
paramiko安装及使用
查看>>
Java私塾:研磨设计模式 之 访问者模式(Visitor)
查看>>
我的友情链接
查看>>