使用Easy Excel导出List<Map<String,Object>>类型数据
- 对于利用Easy Excel导出此类型的数据时,需要将表头和表数据分别导出
- 之后用双层for循环将表头和数据一一对应。
@Override
public void export(HttpServletResponse response) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<>();
map.put("name","张三");
map.put("age","16");
map.put("address","河南省");
list.add(map);
Map<String, Object> map1 = new HashMap<>();
map1.put("name","李四");
map1.put("age","19");
map1.put("address","四川省");
list.add(map1);
Map<String, Object> map2 = new HashMap<>();
map2.put("name","王五");
map2.put("age","25");
map2.put("address","北京市");
list.add(map2);
List<XxglFieldDefine> fList = new ArrayList<XxglFieldDefine>();
XxglFieldDefine x = new XxglFieldDefine();
x.setFieldName("姓名");
x.setFieldKey("name");
fList.add(x);
XxglFieldDefine x1 = new XxglFieldDefine();
x1.setFieldName("年龄");
x1.setFieldKey("age");
fList.add(x1);
XxglFieldDefine x2 = new XxglFieldDefine();
x2.setFieldName("地址");
x2.setFieldKey("address");
fList.add(x2);
String[] arry = new String[fList.size()];
for(int i=0; i<fList.size();i++){
arry[i] = fList.get(i).getFieldKey();
}
String[] headArry = new String[fList.size()];
for(int i=0; i<fList.size();i++){
headArry[i] = fList.get(i).getFieldName();
}
List<List<Object>> dataList = new ArrayList<List<Object>>();
for (Map<String, Object> m : list) {
List<Object> data = new ArrayList<Object>();
for (int i = 0; i < arry.length; i++) {
data.add(m.get(arry[i]));
}
dataList.add(data);
}
try {
ExcelUtil.exportNoModel(response,headArry,"测试导出",dataList);
} catch (Exception e) {
System.out.println("失败了导出");
}
}
public static void exportNoModel(HttpServletResponse response, 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;
}