AutoPoi通过Map导出Excel

AutoPoi通过Map导出Excel


之前的代码是通过实体类来导出Excel的

        JSONObject jsonObject = JSONObject.parseObject(data);
        List<WaterMeterExport> list = service.listMeterWater(jsonObject);
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        // Step.3 AutoPoi 导出Excel
        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
        mv.addObject(NormalExcelConstants.FILE_NAME, "默认"); //此处设置的filename无效 ,前端会重更新设置一下
        mv.addObject(NormalExcelConstants.CLASS, WaterMeterExport.class);
        //update-begin--Author:liusq  Date:20210126 for:图片导出报错,ImageBasePath未设置--------------------
        ExportParams exportParams=new ExportParams("报表名称", "导出人:" + sysUser.getRealname());
        exportParams.setImageBasePath(upLoadPath);
        //update-end--Author:liusq  Date:20210126 for:图片导出报错,ImageBasePath未设置----------------------
        mv.addObject(NormalExcelConstants.PARAMS,exportParams);
        mv.addObject(NormalExcelConstants.DATA_LIST, list);
        return mv;

但是现在查询的参数是可变的,所以没办法使用实体类的方式来导出Excel,在查看AutoPoi的在线文档后,找到了用map的方式导出

在这里插入图片描述

在这里插入图片描述
代码部分

        List<LinkedHashMap<String, Object>> tableMaps = (List<LinkedHashMap<String, Object>>) o;
        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();

        // Step.3 AutoPoi 导出Excel
        List<ExcelExportEntity> entityList = new ArrayList<>();
        ModelAndView mv = new ModelAndView(new JeecgMapExcelView());
        if (tableMaps.size()>0){
            LinkedHashMap<String, Object> map = tableMaps.get(0);
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                if ("f_collecttime".equals(entry.getKey())){
                    ExcelExportEntity entity = new ExcelExportEntity("时间" ,entry.getKey());
                    entity.setWidth(25);
                    entityList.add(entity);
                }else {
                    ExcelExportEntity entity = new ExcelExportEntity(entry.getKey(), entry.getKey());
                    entity.setWidth(35);
                    entityList.add(entity);
                }
            }
        }
        //导出文件名称
        mv.addObject(NormalExcelConstants.FILE_NAME, "默认");
        mv.addObject(MapExcelConstants.ENTITY_LIST, entityList);
        ExportParams exportParams=new ExportParams(title+"数据", "导出人:" + sysUser.getRealname());
        exportParams.setImageBasePath(upLoadPath);
        mv.addObject(NormalExcelConstants.PARAMS,exportParams);
        mv.addObject(NormalExcelConstants.MAP_LIST, tableMaps);
        return mv;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里是一个基于 AutopoiExcel 模板导出 Java 实例。 首先,你需要在你的项目中添加 Autopoi 的依赖。如果你使用 Maven,可以在 `pom.xml` 文件中添加以下代码: ```xml <dependency> <groupId>cn.afterturn</groupId> <artifactId>autopoio</artifactId> <version>2.1.0</version> </dependency> ``` 然后,你需要准备好 Excel 模板文件,这个文件中可以包含一些占位符,例如 `${name}`。 接下来,你需要创建一个 Java 类,用于解析模板文件并填充数据。这个类可以继承 `AbstractExcelView` 类,并实现 `buildExcelDocument()` 方法。以下是一个简单的例子: ```java public class MyExcelView extends AbstractExcelView { @Override protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { // 获取数据 List<MyData> dataList = (List<MyData>) model.get("dataList"); // 加载模板文件 InputStream inputStream = getClass().getResourceAsStream("/templates/my_template.xlsx"); XSSFWorkbook wb = new XSSFWorkbook(inputStream); // 获取模板中的第一个工作表 XSSFSheet sheet = wb.getSheetAt(0); // 填充数据 int rowIndex = 1; for (MyData data : dataList) { XSSFRow row = sheet.createRow(rowIndex++); row.createCell(0).setCellValue(data.getName()); row.createCell(1).setCellValue(data.getValue()); } // 输出 Excel 文件 response.setContentType("application/vnd.ms-excel"); String fileName = "my_excel.xlsx"; response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); OutputStream outputStream = response.getOutputStream(); wb.write(outputStream); outputStream.flush(); outputStream.close(); } } ``` 在这个例子中,我们假设模板文件名为 `my_template.xlsx`,并且包含两列数据:`name` 和 `value`。 最后,你需要在你的控制器中调用这个视图,例如: ```java @GetMapping("/download") public ModelAndView download() { List<MyData> dataList = ...; // 获取数据 ModelAndView mav = new ModelAndView(new MyExcelView()); mav.addObject("dataList", dataList); return mav; } ``` 现在,当你访问 `/download` 路径时,就会下载一个填充好数据的 Excel 文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值