EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。它能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。
在EasyExcel的示例里面都是使用实体写入Excel的,没有使用List<List<String>>写入的。
这里是利用EasyExcel 3 生成数据流直接给前端导出使用,对于需要生成Excel的,直接把数据流写入excel文件即可。
/**
* 导出excel,生成byte数组
*
* @param list 数据 list
* @param sheetName 导入文件的 sheet 名
*/
public static byte[] exportExcel(List<List<String>> list, String sheetName) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
try (ExcelWriter excelWriter = EasyExcelFactory.write(out).build()) {
// 这里注意 如果同一个sheet只要创建一次
WriteSheet writeSheet = EasyExcelFactory.writerSheet(sheetName).build();
// 先写头,后写数据
//excelWriter.write(header, writeSheet);
excelWriter.write(list, writeSheet);
//关键:否则无数据写入,写完成,缓冲区数据写入out;
excelWriter.finish();
log.debug("out.size():{}", out.size());
return out.toByteArray();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
对于实体写入Excel的,这里也对应一段代码,
同样,对于需要生成Excel的,直接把数据流写入excel文件即可。
/**
* 导出excel,生成byte数组
*
* @param cla 要转换的Object对应Class类
* @param list 数据 list
* @param header 表头
* @param sheetName 导入文件的 sheet 名
*/
public static byte[] exportExcel(Class<?> cla, List<Object> list, List<Object> header, String sheetName) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
// 这里 需要指定写用哪个class去写
ExcelWriter excelWriter = EasyExcelFactory.write(out, cla).build();
// 这里注意 如果同一个sheet只要创建一次
WriteSheet writeSheet = EasyExcelFactory.writerSheet(sheetName).build();
// 先写头,后写数据
excelWriter.write(header, writeSheet);
excelWriter.write(list, writeSheet);
//关键:否则无数据写入,写完成,缓冲区数据写入out;
excelWriter.finish();
byte[] bytes = out.toByteArray();
try {
out.close();
} catch (IOException e) {
}
return bytes;
}
项目需要引入依赖类:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.3</version>
</dependency>
希望对大家有帮助。