整理下excel模板方式的导出方法;工具类用的easyexcel;
步骤:1、制作好模板文件。
2、获取模板文件
3、填充模板

分为主数据和明细数据
主数据数据类型可以为对象,可以为map<string,string>;
明细数据类型是list<对象>,可以为list<map<string,string>>
明细的模板要的前缀要与代码里的填充key一致
/**
* @param data 数据 map集合类型 key:头数据可以固定为"head",明细数据map(string,list) ,参数:填充信息、文件名、模板code
* @param title 文件名
* @param templateCode 模板文件
* @return file 创建的文件
*/
public File createSingleSheetExcelByTempLate(Map<String, Object> data, String title, String templateCode) {
// 获取模板文件 根据模板所在位置,自己写获取模板文件的方法
// resource文件夹下的方法是File file = ResourceUtils.getFile("classpath:cityInfo.json")
AdapterBean bean = adapterBeanFactory.getAdapterBeanIgNull(templateCode, null);
String tmpFile = bean.getTmpFile();
Document document = adapterContent.getDocumentService().get(tmpFile.substring(tmpFile.indexOf("=") + 1));
// 临时文件名
String fileName = title + ".xlsx";
// 创建临时文件
File tempFile = CommonUtil.createTempFile(fileName);
try {
// 生成文件
InputStream inputStream = document.getInputStreamSupplier().get();
// easyexcel的模板填充 withTemplate方法可以传file对象,也可传文件路径字符串,可以传文件流
ExcelWriter excelWriter = EasyExcel.write(tempFile).withTemplate(inputStream).excelType(ExcelTypeEnum.XLSX).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
// 循环遍历明细list 有可能有多个明细,用不同的key区分
for (Map.Entry<String, Object> orderData : data.entrySet()) {
String key = orderData.getKey();
// 排除掉head主数据
if ("head".equals(key)) {
continue;
}
List<Map<String, Object>> value = (List<Map<String, Object>>) orderData.getValue();
// 填充数据,key要与模板里的明细的前缀一致
excelWriter.fill(new FillWrapper(key, value), writeSheet);
}
// 判断是否存在着head主数据
if (data.get("head") != null) {
// 填充主数据
excelWriter.fill(data.get("head"), writeSheet);
}
excelWriter.finish();
} catch (IOException e) {
logger.error(e.getMessage());
throw new RuntimeException(e);
}
return tempFile;
}

被折叠的 条评论
为什么被折叠?



