关于使用EsayExcel导出动态列的解决方案

关于使用EsayExcel导出动态列的解决方案

使用拦截器实现

EasyExcel.write(response.getOutputStream(), clazz)
                .registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle))
                .registerWriteHandler(new ExcelRowWriterHandler())
                .sheet("xx信息").doWrite(data);

实现RowWriteHandler接口

class ExcelRowWriterHandler implements RowWriteHandler {

    @Override
    public void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer integer, Integer integer1, Boolean aBoolean) {

    }

    @Override
    public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer integer, Boolean aBoolean) {
     
    }

    @Override
    public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer integer, Boolean aBoolean) {
       
    }
}

先新增对应的表头

@Override
    public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer integer, Boolean aBoolean) {
        if (ExcelUtil.count != null && ExcelUtil.count > 0) {
        	// 最后一列的下标
            int index = 89;
            for(int i = 1; i <=ExcelUtil.count; i++) {
                row.getSheet().setVerticallyCenter(true);
                row.getSheet().setHorizontallyCenter(true);
                Cell cell = row.getSheet().getRow(0).createCell(index);
                cell.setCellValue("新增表头名称");
                Workbook workbook = row.getSheet().getWorkbook();
                // 设置style格式
                CellStyle cellStyle = workbook.createCellStyle();
                Font font = workbook.createFont();
                font.setBold(true);
                font.setFontName("宋体");
                font.setFontHeightInPoints((short) 14);
                cellStyle.setFont(font);
                cell.setCellStyle(cellStyle);
                row.getSheet().setColumnWidth(index, 30 * 256);
                index ++;
            }
        }
    }

在对新增的列添加对应的数据

@Override
    public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer integer, Boolean aBoolean) {
        if (ExcelUtil.count != null && ExcelUtil.count > 0) {
            int index1 = 89;
            String cell1 = row.getCell(0).getStringCellValue();
            if (StrUtil.isNotBlank(cell1) && !cell1.equals("矿源唯一标识")) {
                List<LongitudeLatitudeInfo> longitudeLatitudeInfos = ExcelUtil.LongitudeLatitudeMap.get(Long.valueOf(cell1));
                if (CollUtil.isNotEmpty(longitudeLatitudeInfos)) {
                    for (LongitudeLatitudeInfo info:longitudeLatitudeInfos) {
                        Cell cell = row.getSheet().getRow(integer).createCell(index1);
                        cell.setCellValue(info.getLongitude()+","+info.getLatitude());
                        index1 ++;
                    }
                }
            }
        }
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值