原来程序用的poi的HSSF导出excel,后面数据量增多再导出报错(Invalid row number (65536) outside allowable range (0..65535)),然后改用XSSF后依然报错java.lang.OutOfMemoryError: Java heap space或者java.lang.OutOfMemoryError: GC overhead limit exceeded。百度了下,支持大批量数据导出用SXSSF,导出文件名是xlsx,支持导出百万条数据。
我是参考了这一篇博客https://blog.csdn.net/qq_33620899/article/details/78565384
下面是我自己的做法
controller:
@ResponseBody
@RequestMapping(value = "XXXXXXX")
public ResponseEntity 方法名(String startDate,String endDate,Integer f_factory_id)throws Exception {
Map map = Maps.newHashMap();
if(StringUtils.isNotEmpty(startDate)){
map.put("startDate",startDate);
}
if(StringUtils.isNotEmpty(endDate)){
map.put("endDate",endDate);
}
if(f_factory_id !=null){
map.put("f_factory_id",f_factory_id);
}
String now = DateFormatUtils.format(new Date(),"yyyyMMdd");
HttpHeaders headers = new HttpHeaders();
String downloadFielName = new String(("用户订单统计_"+now+".xlsx").getBytes("UTF-8"),"iso-8859-1");
headers.setContentDispositionFormData("attachment", downloadFielName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity(statisticsService.downloadUserOrderStatistics(map), headers, HttpStatus.CREATED);
}
service:
public byte[] downloadUserOrderStatistics(Map param) throws Exception {
List
导出工具类:
public static byte[] buildExcelSXSS(Object[] columnTitles, List
导出速度也还行,9W+条数据大概20多秒