easypoi使用模板实多级表头、多个sheet导出,动态导出列、表头
build.gradle
如果使用maven
一、多级表头和sheet
fe的写法 fe标志 冒号 list数据 单个元素数据(默认t,可以不写) 第一个元素
{{$fe: maplist t t.id }}
像比较复杂的表头,建议使用模板实现比较方便。
二、模板导出
Map<Integer, List<Map<String, Object>>> resultMap = new TreeMap<>();
List<Map<String, Object>> resultList = new ArrayList<>();
List<String> sheetList = new ArrayList<>();
int sheetIndex = 0;
for (int i = 0; i < 3; i++) {
sheetIndex++;
Map<String, Object> map = new TreeMap<String, Object>();
map.put("data", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
List<Map<String, String>> listMap = new ArrayList<Map<String, String>>();
int id = 0;
for (int i2 = 0; i2 < 5; i2++) {
id++;
Map<String, String> lm = new TreeMap<String, String>();
lm.put("id", id + "");
lm.put("item1", "商品" + sheetIndex + "-1");
lm.put("item2", "商品" + sheetIndex + "-2");
lm.put("item3", "商品" + sheetIndex + "-3");
lm.put("item4", "商品" + sheetIndex + "-4");
lm.put("item5", "商品" + sheetIndex + "-5");
listMap.add(lm);
}
map.put("maplist", listMap);
resultList.add(map);
sheetList.add("Container " + sheetIndex);
}
//这里有个坑需要注意下
List<Map<String, Object>> reverseResultList = new ArrayList<>();
for (int i = resultList.size() - 1; i >= 0; i--) {
reverseResultList.add(resultList.get(i));
}
resultMap.put(0, reverseResultList);
TemplateExportParams params = new TemplateExportParams("D:/test/test.xls", true);
Workbook workbook = ExcelExportUtil.exportExcelClone(resultMap, params);
int i = 0;
for (String s : sheetList) {
workbook.setSheetName(i, s);
i++;
}
FileOutputStream fos = new FileOutputStream("D:/test/test_map.xls");
workbook.write(fos);
fos.close();
workbook.close();
这里有个坑需要注意下
List<Map<String, Object>> reverseResultList = new ArrayList<>();
for (int i = resultList.size() - 1; i >= 0; i–) {
reverseResultList.add(resultList.get(i));
}
之所以需要写这一步,是因为
ExcelExportUtil.exportExcelClone(resultMap, params);
里面源码回会把我上面按顺序的数据倒序输出
所以上面我只能先把自己的数据倒序,才能保证数据的顺序是自己想要的输出结果
三、效果
暂时就这些了。