使用POI创建word表格合并单元格兼容wps
生活随笔
收集整理的這篇文章主要介紹了
使用POI创建word表格合并单元格兼容wps
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
poi創(chuàng)建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跨列合并單元格后會(huì)出現(xiàn)一些問(wèn)題。如圖所示:
而在office中的正確結(jié)果(我想要的)如下所示:
這是由于我設(shè)置了表格列寬自動(dòng)分割:
// 列寬自動(dòng)分割 CTTblWidth width = table.getCTTbl().addNewTblPr().addNewTblW(); width.setType(STTblWidth.DXA); width.setW(BigInteger.valueOf(9072));
導(dǎo)致在wps中第一行雖然合并了“紙媒”、“新媒體”單元格,但由于設(shè)置了列寬自動(dòng)分割,致使在wps中單元格豎線沒(méi)有對(duì)齊,而是均勻的分成了三個(gè)列寬相同的單元格。
解決辦法如下:設(shè)置合并的單元格的寬度(“紙媒”、“新媒體”單元格),則在wps中豎線就對(duì)上了。
//設(shè)置合并單元格的大小
//rowNum:合并的單元格所在行號(hào) fromCellNum:合并的起始單元格 toCellNum:合并的結(jié)束單元格 9072:列寬總大小(我寫死了9072) columnNum:表格總列數(shù)
table.getRow(rowNum).getCell(fromCellNum).getCTTc().addNewTcPr().addNewTcW()
.setW(BigInteger.valueOf((9072 / columnNum) * (toCellNum - fromCellNum + 1)));
實(shí)際項(xiàng)目開(kāi)發(fā)中使用如下:
/**
* 跨列合并表格是4列,所以8600/4,項(xiàng)目中需要在最后一行合并2、3、4列,所以fromCell=1,toCell=3
* @param table
* @param row 所合并的行
* @param fromCell 起始列
* @param toCell 終止列
*/
public void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) {
table.getRow(row).getCell(fromCell).getCTTc().addNewTcPr().addNewTcW()
.setW(BigInteger.valueOf((8600 / 4) * (toCell - fromCell + 1)));
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);
}
}
}
總結(jié)
以上是生活随笔為你收集整理的使用POI创建word表格合并单元格兼容wps的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 沈阳东软是个垃圾的公司?
- 下一篇: 让linux用户隶属于多个组