Easyexcel导出Map类型的数据

Easyexcel导出Map类型的数据

入参对象

@Data
public class SqlScriptVerification implements Serializable {

    @ApiModelProperty(value = "sql脚本")
    private String sqlScript;

    @ApiModelProperty(value = "校验sql参数")
    private Map<String, Object> params;
}

工具类 ExcelUtil

public static void exportModel(HttpServletResponse response,  List<String> headMap, String fileName, List<List<Object>> dataList ){
        try {
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            String name = URLEncoder.encode(fileName, "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename=" + name + ".xlsx");
            EasyExcel.write(response.getOutputStream()).head(createdHead(headMap)).sheet(fileName).doWrite(dataList);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //处理字段的表头值
    private static List<List<String>> createdHead(String[] headMap) {
        List<List<String>> headList = new ArrayList<List<String>>();
        for (String head : headMap) {
            List<String> list = new ArrayList<String>();
            list.add(head);
            headList.add(list);
        }
        return headList;
    }

controller

    @PostMapping("/export")
    @ApiOperation(value = "执行sql")
    public ResponseResult export(@RequestBody SqlScriptVerification scriptVerification, HttpServletResponse response) {
        log.debug("导出Excel, export(scriptVerification --> {})", scriptVerification);
        return sqlService.export(scriptVerification, response);
    }

service实现类

    @Override
    public ResponseResult export(SqlScriptVerification scriptVerification, HttpServletResponse response) {
        List<Map> list = sqlMapper.executeSql(scriptVerification.getParams(), scriptVerification.getSqlScript());
        Map m = list.get(0);
        Iterator iterator = m.keySet().iterator();
        List<String> head = new ArrayList<>();
        while (iterator.hasNext()) {
            head.add(String.valueOf(iterator.next()));
        }
        List<List<Object>> data = list.stream().map(d -> {
            return head.stream().map(h -> {
                return d.get(h);
            }).collect(Collectors.toList());
        }).collect(Collectors.toList());
        ExcelUtil.exportModel(response, head, "test", data);
        return null;
    }

Mapper.xml

    <select id="executeSql" parameterType="java.lang.Object" resultType="map" >
        ${sql}
    </select>

请求参数

{"sqlScript":"SELECT airline \"航司IATA代码\", share_flights \"共享航班\", in_out_flag \"进出港标识\", task \"航班任务\", attr \"属性\" FROM dynamic_flight WHERE dynamic_flight_id > #{params.dynamicFlightId}","params":{"dynamicFlightId":1382892107614}}

结果
在这里插入图片描述

要使用EasyExcel导出List或Map,需要遵循以下步骤: 1.添加EasyExcel依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.6</version> </dependency> ``` 2.编写导出逻辑: ```java //创建数据 List<Map<String, Object>> dataList = new ArrayList<>(); Map<String, Object> dataMap1 = new LinkedHashMap<>(); dataMap1.put("name", "张三"); dataMap1.put("age", 20); dataMap1.put("gender", "男"); dataList.add(dataMap1); Map<String, Object> dataMap2 = new LinkedHashMap<>(); dataMap2.put("name", "李四"); dataMap2.put("age", 21); dataMap2.put("gender", "女"); dataList.add(dataMap2); //设置导出参数 String fileName = "test.xlsx"; String sheetName = "Sheet1"; Class<? extends BaseRowModel> clazz = null; ExcelWriter excelWriter = null; try { excelWriter = EasyExcel.write(fileName).build(); WriteSheet writeSheet = EasyExcel.writerSheet(sheetName).build(); if (!dataList.isEmpty()) { //获取首个Map对象的key,用于作为表头 Set<String> keySet = dataList.get(0).keySet(); List<List<String>> headList = new ArrayList<>(); List<String> headTitleList = new ArrayList<>(); for (String key : keySet) { headTitleList.add(key); } headList.add(headTitleList); //写出数据 excelWriter.write(dataList, writeSheet, EasyExcel.writerExcelDataHandler().build()); //写出表头 excelWriter.writeHead(headList, writeSheet); } } finally { if (excelWriter != null) { excelWriter.finish(); } } ``` 上面的代码中,我们先创建了一个List<Map<String, Object>>对象作为导出数据,然后设置导出参数,包括文件名、Sheet名、实体类类型等,最后使用EasyExcel的API进行导出。 注意,要写出表头,我们需要先获取首个Map对象的key,然后将其作为表头写入Excel文件中。 3.运行导出代码,查看结果。 导出的结果应该是一个包含数据和表头的Excel文件。其中,第一行为表头,后面的每一行为数据
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值