POI 导出合并列

/**
 * 合并单元格相同的值
 * @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);
时间: 2024-09-19 14:42:13

POI 导出合并列的相关文章

sql合并列转行,在线等

问题描述 sql合并列转行,在线等 有表 wareid makeno qty busno 10001 11111 5 111 10001 11111 10 222 10002 22222 11 111 10002 33311 20 222 得到 wareid makeno qty busno 10001 11111 5@10@ 111@222@ 10002 22222 11@0@ 111@0@ 10002 33311 0@20@ 0@222@ 解决方案 可以这么写 select wareid ,

poi 导出ppt时,涉及到table的问题

问题描述 用poi导出ppt时,table需要合并单元格,这个怎么实现,有用到过得吗? 解决方案 解决方案二:最近想实现个poi导出excel的问题还木有实现--解决方案三:那就一起讨论吧你要实现什么?解决方案四:没有找到合适的方法,我最好有2种方法来解决:一是,生成没有合并的ppt,在手动合并二是,用table中的setAnchor(),来确定所以tableCell的位置,但是生成之后,表格就像一张图一样,操作性不强,所以如果是在不能有人工参与的话,还是不要用此种方法

poi-java 使用POI导出大数据,服务器内存不释放

问题描述 java 使用POI导出大数据,服务器内存不释放 RT,我用java 使用POI导出大数据, 数据是可以导出来.但是服务器的内存一直不释放.导一次 内存就会增加100M-2G 视数据量大小.当超过JVM设置的15G时,服务就会瘫痪掉,无法访问. 主要代码如下, MapList list = db.query(SQL); String EXCELNAME = (new StringBuilder(String.valueOf(unitId))).toString(); HSSFWorkb

java poi导出excel,用excel 2013打开样式不能正常显示

问题描述 java poi导出excel,用excel 2013打开样式不能正常显示 我用的是poi3.02.用2010打开没问题,用2013打开只是合并单元格的地方,边框样式不能显示. 解决方案 java poi生成excel并修改excel样式POI 导出EXCEL样式实例POI Excel导出样式设置 解决方案二: poi设置的用07版的应该就可以 解决方案三: poi 针对03和07不同的版本会给出不同的类去处理的 你看看你的代码是 用 03还是 07 生成的 excel

poi导出级联下拉excel

问题描述 poi导出级联下拉excel 导出的excel中,带有级联的省市县.用office打开,完全没有问题.但是用wps打开就会显示不出来.求大神指教.是否是兼容性问题 解决方案 POI导出EXCEL 下拉列表引用

poi java excel-java poi 导出excel 把一样的数据动态合并单元格

问题描述 java poi 导出excel 把一样的数据动态合并单元格 急求,有一个list数据 导出成 这种格式 公司和年份两列是要有动态合并功能 并且年份合并的时候不能跨公司 有没有大神帮帮忙... HSSFWorkbook workbook = new HSSFWorkbook(); String[] columnNames = new String[]{"编号","公司", "年份","性质", "名称&qu

hyperlink-关于 POI 导出EXCEL 中 HyperLink 设置中文地址乱码

问题描述 关于 POI 导出EXCEL 中 HyperLink 设置中文地址乱码 请问大家一个问题,我在使用POI 3.6 的时候, 在为单元格添加HyperLink的时候,遇到添加 中文连接乱码问题,例如我的链接地址是:/file/这是PDF.PDF 在EXCEL中就会变为/file/??PDF.PDF 请问如何解决? 解决方案 http://www.iteye.com/problems/70541

用poi导出word(2003版)图片导不出来的问题

问题描述 用poi导出word(2003版)图片导不出来的问题 如题: 现想将一个个人简历导出doc格式的word文档,但是简历中的照片一直导不出,执行导出的是PoiHwpfExtractContentImpl,求各位解答

在线等大神-poi导出后台提示报错,Minimum column number is 0!

问题描述 poi导出后台提示报错,Minimum column number is 0! 今天在用poi做导出的时候遇到一些问题! java.lang.IllegalArgumentException: Minimum column number is 0 at org.apache.poi.ss.util.CellRangeAddressBase.validateColumn(CellRangeAddressBase.java:73) at org.apache.poi.ss.util.Cel