POI 导出合并列

简介: /** * 合并单元格相同的值 * @param wb * @param startRow 去除表头要合并的第一行index * @param columns 要合并的列的index */private static void mergeCell(Workbook wb, int startRow, int.
/**
 * 合并单元格相同的值
 * @param wb
 * @param startRow 去除表头要合并的第一行index
 * @param columns   要合并的列的index
 */
private static void mergeCell(Workbook wb, int startRow, int... columns) {
    CellStyle cellStyle = wb.createCellStyle();
    cellStyle.setAlignment(CellStyle.ALIGN_CENTER);//水平居中
    cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);//垂直居中

    int numOfSheet = wb.getNumberOfSheets();
    logger.info("numOfSheet:" + numOfSheet);
    for (int i = 0; i < numOfSheet; i++) {
        Sheet sheet = wb.getSheetAt(i);

        for (int k = 0; k < columns.length; k++) {
            int cellNum = columns[k];

            int lastRowNum = sheet.getLastRowNum();
            logger.info("lastRowNum:" + lastRowNum);
            int currentRow = startRow;
            for (int j = startRow; j <= lastRowNum; j++) {
                Cell cell = sheet.getRow(j).getCell(cellNum);
                String cellValue = cell.getStringCellValue();

                String nextValue = getNextCellValueString(cellNum, sheet.getRow(j + 1));
                logger.info("当前值:" + cellValue + "     下一个值:" + nextValue);
                // 将当前cellValue 置空直到最后一个
                cell.setCellValue("");
                if (cellValue.equals(nextValue)) {
                    continue;
                } else {
                    // 获取左上角的单元格--合并后只保存左上角单元格的值
                    Cell leftTopCell = sheet.getRow(currentRow).getCell(cellNum);
                    leftTopCell.setCellStyle(cellStyle);
                    leftTopCell.setCellValue(cellValue);
                    // 多个cell相同合并
                    if (currentRow != j) {
                        sheet.addMergedRegion(new CellRangeAddress(currentRow, j, cellNum, cellNum));
                        currentRow = j + 1;
                    } else {
                        currentRow += 1;
                    }
                    logger.info("设置左上角单元格:" + currentRow + "     值:" + cellValue);
                }
            }
        }
    }

}

/**
 * 获取下一个单元格的值
 * @param cellNum
 * @param nextRow
 * @return
 */
private static String getNextCellValueString(int cellNum, Row nextRow) {
    String nextValue;
    if (nextRow != null) {
        Cell nextCell = nextRow.getCell(cellNum);
        if (nextCell != null) {
            nextValue = nextCell.getStringCellValue();
        } else {
            nextValue = "";
        }
    } else {
        nextValue = "";
    }
    return nextValue;
}

使用方法:指定要合并的开始行,指定要合并的数组列

 mergeCell(workbook,2, 2);
目录
相关文章
|
Java API Android开发
【POI框架实战】——POI设置Excel单元格格式
 “这个excel中的数据怎么不能做加法啊?”、“标头这一行的字体怎么这么小啊,我都看不清”、“这一列能不能换个颜色,明显一些”、“你把这一列的数据给我留两个小数位。”、“这些数据能不能以货币的类型展示啊,就每个三位一个小逗号那种……”
【POI框架实战】——POI设置Excel单元格格式
|
4月前
POI合并单元格
POI合并单元格
22 0
|
7月前
POI入门操作Excel单元格
POI入门操作Excel单元格
100 0
|
Java API 数据安全/隐私保护
POI 导出 Excel:字体颜色、行列自适应、锁住、合并单元格……
POI 导出 Excel:字体颜色、行列自适应、锁住、合并单元格……
503 0
POI 导出 Excel:字体颜色、行列自适应、锁住、合并单元格……
|
Java Maven
使用EasyPOI导出复杂的Word表格
使用EasyPOI导出复杂的Word表格
2836 0
使用EasyPOI导出复杂的Word表格
excel导入poi中的数据使用cell.getStringCellValue()获取报错
excel导入poi中的数据使用cell.getStringCellValue()获取报错
351 0
|
Java 数据库连接 Apache
使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!
使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!
128 1
使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!
POI Excel 合并数据相同的行
import java.io.Serializable; /** * POI Excel报表导出,列合并实体 * * @author WQ * */ public class PoiModel implements Serializable{ /** * ...
1697 0
|
Java API
操作Excel,除了使用POI你还会其他的?
操作Excel,除了使用POI你还会其他的?
298 0
操作Excel,除了使用POI你还会其他的?