【POI合并单元格】

POI合并单元格

 public void writeTableDataWithMergeCell(PoiTableHeader header,List<?> dataList){

        HSSFCellStyle cellStyle=(HSSFCellStyle)header.getWorkbook().createCellStyle();
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
        cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
        cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框
        cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框
        // 设置所有单元格文字上下居中
        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        int mergeCellsBegin = 1;
        int mergeCellsEnd = 1;
        int mergeCellCols=9;
        int startRow=header.getMaxRowSpan();
        List<FieldColumn> fieldColumns = header.getFieldColumns();
        int colsSize = fieldColumns.size();
        String tempVar ="";//当前前9列的值
        String preTempVar ="";//上次前9列的值
        for(int i=0;i<dataList.size();i++){
            preTempVar = tempVar;
            tempVar = "";
            Object obj=dataList.get(i);
            Row row=header.getSheet().createRow(startRow+i);
            for(int j=0;j< colsSize; j++){
                FieldColumn fieldColumn= fieldColumns.get(j);
                Cell cell=row.createCell(j);
                String field=fieldColumn.getField();
                Object val =BeanUtil.getFieldValueFromObject(obj, field);
                if(val!=null){
                    if (j < mergeCellCols){
                        tempVar += val.toString();
                    }
                    cell.setCellValue(val.toString());
                }
                cell.setCellStyle(cellStyle);
            }
            //如果 当前值!=上次值  B=当前行 E=当前行
            if (!tempVar.equals(preTempVar)){
                if (mergeCellsEnd>mergeCellsBegin){
                    System.err.println("合并"+mergeCellsBegin+","+mergeCellsEnd);
                    merge(header,mergeCellsBegin,mergeCellsEnd,mergeCellCols);
                }
                mergeCellsBegin = startRow+i;
                mergeCellsEnd = startRow+i;
            }
            //如果 当前值==上次值  B=B     E=当前行
            if (tempVar.equals(preTempVar)){
//                mergeCellsBegin = startRow+i;
                for (int n=0;n<mergeCellCols;n++){
                    row.getCell(n).setCellType(CELL_TYPE_BLANK    );
                }
                mergeCellsEnd = startRow+i;
            }
            System.err.println("B:"+mergeCellsBegin+"  E:"+mergeCellsEnd);
        }

    }

    private void merge(PoiTableHeader header, int mergeCellsBegin, int mergeCellsEnd, int mergeCellCols) {
        for (int j = 0; j < mergeCellCols; j++) {
            CellRangeAddress region = new CellRangeAddress(mergeCellsBegin, mergeCellsEnd, j, j);
            header.getSheet().addMergedRegion(region);
        }
    }


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值