官网例子:https://hutool.cn/docs/#/poi/Excel%E7%94%9F%E6%88%90-ExcelWriter
可根据真实业务做调整
代码实现:
controller
@GetMapping("download")
public void down(HttpServletResponse response){
// 测试数据
ArrayList<Student> list = new ArrayList<>();
for (int i = 0; i < 5; i++) {
list.add(new Student(i+"号","test"+i,"2022"+i, DateUtil.date()));
}
ExcelWriter writer = ExcelUtil.getWriter(true);
writer.setOnlyAlias(true); // 保留别名中的字段值
writer.autoSizeColumnAll(); //自动列宽
// 读取json文件,填充表头
List<Map<String, String>> jsonFile = MyUtil.getJSONFile();
for (Map<String, String> map : jsonFile) {
writer.addHeaderAlias(map.get("key"), map.get("value"));
}
// 写入数据
writer.write(list);
String fileName = URLEncoder.encode("存量房销售专题数据","UTF-8");
response.setContentType(writer.getContentType());
response.setHeader("Content-Disposition","attachment;filename="+fileName+".xlsx");
BufferedOutputStream stream = new BufferedOutputStream(response.getOutputStream());
writer.flush(stream,true);
stream.close();
writer.close();
}
读取json文件utli
public class MyUtil {
public static List<Map<String,String>> getJSONFile(){
File file = new File("test.json");
JSON json = JSONUtil.readJSON(file, StandardCharsets.UTF_8);
JSONObject entries = JSONUtil.parseObj(json);
List<Map<String,String>> data = (List<Map<String,String>>) entries.get("data");
return data;
}
}
json文件(对应别名和实体类字段)
{
"data": [
{
"key": "id",
"value": "序号"
},
{
"key": "name",
"value": "名字"
},
{
"key": "stuNo",
"value": "学号"
}
]
}