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);
目录
相关文章
|
8月前
|
API
Easypoi导出合并单元格并统计
Easypoi导出合并单元格并统计
|
8月前
|
easyexcel BI
excel合并列导出文件
excel合并列导出文件
POI合并单元格
POI合并单元格
67 0
|
Java API 数据安全/隐私保护
POI 导出 Excel:字体颜色、行列自适应、锁住、合并单元格……
POI 导出 Excel:字体颜色、行列自适应、锁住、合并单元格……
642 0
POI 导出 Excel:字体颜色、行列自适应、锁住、合并单元格……
POI入门操作Excel单元格
POI入门操作Excel单元格
153 0
|
Java Maven
使用EasyPOI导出复杂的Word表格
使用EasyPOI导出复杂的Word表格
3635 0
使用EasyPOI导出复杂的Word表格
|
Java 数据库连接 Apache
使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!
使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!
176 1
使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!
excel导入poi中的数据使用cell.getStringCellValue()获取报错
excel导入poi中的数据使用cell.getStringCellValue()获取报错
514 0
POI Excel 合并数据相同的行
import java.io.Serializable; /** * POI Excel报表导出,列合并实体 * * @author WQ * */ public class PoiModel implements Serializable{ /** * ...
1901 0