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}}
结果