easypoi多sheet页导出,导出时间字段格式化

前置简单使用请参考easypoi API文档:

1. 前言 - Powered by MinDoc

1.首先是easypoi多sheet页导出:

和普通导出有一些区别,首先对多数据按指定的字段进行分类,之后按不同类型存入不同sheet页,代码如下:

@ApiOperation("导出抵质押品续封续冻资产")
@PostMapping("/export")
public ResponseResult exportFreezeLock(@RequestBody Map<String, Object> request, HttpServletResponse response) throws Exception {
        //查询抵质押品续封续冻资产
        QueryWrapperUtil qu = new QueryWrapperUtil();
        QueryWrapper<AmcAstFreezeLockB> queryWrapper = qu.getWrapper(request, AmcAstFreezeLockB.class,"astFreezeLock","documentNumber");
        Boolean isPage = true; //是否分页
        List<AmcAstFreezeLockB> records = null;
        if (isPage) {
            IPage<AmcAstFreezeLockB> result = amcAstFreezeLockBService.page(getIPage(request),queryWrapper);
            records = result.getRecords();
        } else {
            records = amcAstFreezeLockBService.list(queryWrapper);
        }
        Map<String, List<AmcAstFreezeLockB>> typeMap = null;
        if(CollectionUtils.isNotEmpty(records)){

            records.stream().forEach(t->{
                if(StringUtils.isNotBlank(t.getDataStatus()) && "1".equals(t.getDataStatus())){
                    t.setDataStatus("");
                }
            });
            typeMap = records.stream().collect(Collectors.groupingBy(AmcAstFreezeLockB::getAssetsTypeRoacf));
        }
        //获取模板路径
        exportAssetStanding(request,response,typeMap);
        return result();
    }


private void exportAssetStanding(Map<String, Object> request, HttpServletResponse response, Map<String, List<AmcAstFreezeLockB>> typeMap) throws IOException, ParseException {
        //获取模板存储路径
        String templateUrl = "config/excel/amcAstFreezeLock/amcAstFreezeLock_export.xlsx";
        InputStream templateIs = new ClassPathResource(templateUrl).getInputStream();
        Workbook templateWb = WorkbookFactory.create(templateIs);
        String nowDateStr = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        //数据,模板和模板地址都准备好了,开始处理
        Workbook wb = amcAstFreezeLockBService.writeExcelJz(templateWb, templateUrl,typeMap);
        FileUtil.download(response, wb, "抵质押品续封续冻资产"+"-"+nowDateStr+".xlsx");
    }

首先是数据的简单处理,模板的获取,准备完成后开始按照多sheet导出方法的数据格式拼装数据:

//该方法作为导出前数据处理,将数据处理为符合多sheet导出方法的数据格式
public Workbook writeExcelJz(Workbook templateWb, String templateUrl, Map<String, List<AmcAstFreezeLockB>> typeMap) {
        //获取资产类型
        List<BaseDictionary> assetTypeList = ValueSetUtils.get("gdfamc_ast_assets");
        //写入到excel
        //获取导入模板作为导出模板
        TemplateExportParams params = new TemplateExportParams();
        params.setTemplateUrl(templateUrl);
        params.setTemplateWb(templateWb);
        params.setHeadingStartRow(0);
        //设置表头占行数
        params.setHeadingRows(3);
        //设置是否导出全部sheet页,实测数据分类有几种导出几个,并不会导出空sheet
        params.setScanAllsheet(true);
        //设置字段值集处理器,easypoi也有,这个是封装过的
        params.setDictHandler(new ValueSetDictHandler());

        Map<Integer,List<Map<String,Object>>> map = new HashMap<>();

        //循环根据资产类型放入不同sheet页
        for (Map.Entry<String, List<AmcAstFreezeLockB>> entry : typeMap.entrySet()) {
            List<Map<String, Object>> mList = new ArrayList<>();
            Map<String, Object> m1 = Maps.newHashMap();
            //dataList与excel导出模板对应
            m1.put("dataList", entry.getValue());
            mList.add(m1);
            if ("03".equals(entry.getKey())){//在建工程 sheet页0
                map.put(0,mList);
            }else if ("04".equals(entry.getKey())){//银行存款
                map.put(1,mList);
            }else if ("05".equals(entry.getKey())){//设备
                map.put(2,mList);
            }else if ("06".equals(entry.getKey())){//车辆
                map.put(3,mList);
            }else if ("07".equals(entry.getKey())){//股权
                map.put(4,mList);
            }else if ("09".equals(entry.getKey())){//不动产
                map.put(5,mList);
            }else if ("10".equals(entry.getKey())){//仓单
                map.put(6,mList);
            }else if ("11".equals(entry.getKey())){//存单
                map.put(7,mList);
            }else if ("12".equals(entry.getKey())){//票据
                map.put(8,mList);
            }else if ("13".equals(entry.getKey())){//其他资产
                map.put(9,mList);
            }
        }

        Workbook workbook = this.exportExcelClone(map, params);
        return workbook;
    }

    //这个就是多sheet导出调用的方法,easypoi的ExcelExportUtil工具类中有,这里单独写是因为原方法中没有值集处理器,重写后给设置了值集处理,正常到这里就可以了
    private  Workbook exportExcelClone(Map<Integer, List<Map<String, Object>>> map,
                                            TemplateExportParams params) {
        return new ExcelExportOfTemplateUtilC().createExcelCloneByTemplate(params, map);
    }

添加值集处理:

 2.导出时时间格式化

这里采用的时excel模板导出的形式,尝试了在实体类@Excel注解中添加format=“yyyy-MM-dd”注解无效,网上搜索说时导出时easypoi会自动将date类型转String,所以格式化无效,采用解决方案是在模板中通过模板语法进行日期格式化,如下:

{{$fe: dataList 确定数据源

 导出时对应值集:

 导出时日期格式化:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过实现ExcelExportServer接口并重写其中的方法来实现动态字段导出数据,并且对时间类型数据进行格式处理。 以下是一个示例代码: ```java public class MyExcelExportServer implements ExcelExportServer { @Override public void createExcel(List<Map<String, Object>> list, String[] titles, String[] fields, OutputStream out) { // 创建Excel对象 Workbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // 创建表头 Row titleRow = sheet.createRow(0); for (int i = 0; i < titles.length; i++) { Cell cell = titleRow.createCell(i); cell.setCellValue(titles[i]); } // 填充数据 int rowNum = 1; for (Map<String, Object> data : list) { Row row = sheet.createRow(rowNum++); for (int i = 0; i < fields.length; i++) { Cell cell = row.createCell(i); String field = fields[i]; Object value = data.get(field); if (value == null) { cell.setCellValue(""); } else if (value instanceof Date) { // 对时间类型数据进行格式化处理 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedValue = sdf.format((Date) value); cell.setCellValue(formattedValue); } else { cell.setCellValue(value.toString()); } } } // 设置列宽自适应 for (int i = 0; i < titles.length; i++) { sheet.autoSizeColumn(i); } // 输出Excel文件 try { workbook.write(out); } catch (IOException e) { e.printStackTrace(); } } } ``` 在导出时,调用方法时传入实现了ExcelExportServer接口的对象即可: ```java ExcelExportUtil.exportExcel(new ExportParams("标题", "Sheet1"), titles, fields, data, new MyExcelExportServer(), response, "yyyy-MM-dd HH:mm:ss"); ``` 其中,最后一个参数是日期类型数据的格式化字符串。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值