使用POI创建word表格合并单元格兼容wps

摘要:
如图所示,office中的正确结果如下,因为我设置了自动表列宽segmentation://Automatic列宽分段CTTblWidth=表。getCTTbl()。addNewTblPr()。addNewTblW();width.setType;宽度setW;因此,wps中的第一行合并了“纸媒”和“新媒体”单元格,但由于设置了自动列宽分割,wps的单元格垂直线没有对齐,而是均匀地分成三个列宽相同的单元格。

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跨列合并单元格后会出现一些问题。如图所示:

使用POI创建word表格合并单元格兼容wps第1张

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

使用POI创建word表格合并单元格兼容wps第2张

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

// 列宽自动分割
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)));

免责声明:文章转载自《使用POI创建word表格合并单元格兼容wps》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS开发UI篇—iPad和iPhone开发的比较《逆向工程核心原理》笔记第一章到第十一章下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

NPOI 导出Excel插入图片、设置边框样式、合并单元格、字体样式等小知识

1.设置单元格上边框为黑色实线 ICellStyle cellStyleTail = sheet.Workbook.CreateCellStyle(); cellStyleTail.BorderTop = BorderStyle.Thin; https://blog.csdn.net/ezreal_pan/article/details/81134701...

原创:用VBA实现将鼠标选择的单元格按照指定格式合并并复制到剪切板

原创:用VBA实现将鼠标选择的单元格按照指定格式合并并复制到剪切板 一、主要实现以下功能:1、用鼠标选择单元格(可谓连续单元格,也可为不连续的)后,按照要求格式“证件号码:+选定内容+“,”+”选定内容“等等进行合并2、合并后的内容,直接复制到剪切板二、代码示例: SubTestA() Set a = NewDataObject '情况存放合并结果的单...

FastReport.Net使用:[21]表格(Table)控件

对表格控件的一些常用操作  合并单元格:选择需要合并的单元格(按住Shitf多选),然后在右键菜单中选择【合并单元格】。         2.删除/插入行 鼠标移到在行头,当鼠标状态变为向右的箭头时点击鼠标选中改行,然后右键鼠标显示右键菜单,选择删除等操作。 另外,在报表树中也能进行删除等操作。 3.编辑数据: 双击需要编辑的单元格,弹出文本编辑器进...

VBA在Excel中的应用(四)

目录 Column ComboBox Copy Paste CountA Evaluate Excel to XML Excel ADO Excel to Text File Excel Toolbar Column 1. 选择整列 Sub SelectEntireColumn()    Selection.EntireColumn.SelectEn...

Bootstrap Table 中文文档(完整翻译版)

表格参数: 名称 标签 类型 默认 描述 - data-toggle String ‘table’ 不用写 JavaScript 直接启用表格。 classes data-classes String ‘table table-hover’ 表格的类名称。默认情况下,表格是有边框的 你可以添加 ‘table-no-bordered’ 来删除...

1.使用POI结合springmvc实现上传

1.引入poi的依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency...