SXSSFWorkbook导出大数据量Excel文件

最近在导出大数据量进excel文件时,之前用的XSSFWorkbook在写文件的时候,项目一直报内存溢出。在查询POI后发现新出的SXSSFWorkbook正是为处理大数据量而生,在苦苦找了两天SXSSFWorkbook导出带模板的excel未果后,决定采用excel表头自己打印的方法来形成表头字段。

String[] assetHeadTemp = {"批次","供应商代码","商品名称"};//表头名
String[] assetNameTemp = {"charg","zgysdm","zspmc"};//表头字段
Workbook wb = new SXSSFWorkbook(100);// 内存中保留 1000 条数据,以免内存溢出,其余写入 硬盘  
Sheet sheet = wb.createSheet("Sheet1");
Row row;
Cell cell;
// 输出表头
row = sheet.createRow(0);
for (int i = 0; i < assetHeadTemp.length; i++) {
cell = row.createCell(i);
cell.setCellValue(assetHeadTemp[i]);
}
int rowIndex = 1;
// 输出表内数据
for (Map<String, Object> map : dataList) {
row = sheet.createRow(rowIndex++);
int index = 0;
for (int i = 0; i < assetNameTemp.length; i++) {
cell = row.createCell(index++);
cell.setCellValue(map.get(assetNameTemp[i]) != null ? map.get(assetNameTemp[i]).toString() : "");
}
}
FileOutputStream out = new FileOutputStream("/temp/sxssf.xlsx");//文件保存地址
wb.write(out);// 导出excel文件
if (out != null) {
try {
out.close();
} catch (IOException e) {
}
}
if (wb != null) {
wb.close();
}
上述方法适合测试下载文件到本地的绝对路径,如果部署到服务器上,想要点击下载后在页面就能显示如图提示框,则需要在controller层获取下载地址。







方法是在service层将数据导成excel文件,然后用SFTP将文件上传到服务器端(上传、下载方法自行百度),最后在controller层从服务器下载该文件。

response.setContentType("multipart/form-data");
			
	String fileName = "报表";
			
OutputStream out = null;
try {
response.addHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("UTF-8"),"iso8859-1")+".xlsx");
// 用response得到的下载地址,会下载到电脑的“下载”文件夹并提示
out = new BufferedOutputStream(response.getOutputStream());
// 用SFTP下载上传的excel文件,代码省略
			
out.flush();
} catch (Exception e) {
e.printStackTrace();
logger.error("导出失败");
} finally {
	if (out != null) {
		try {
			out.close();
		} catch (IOException e) {
		}
	}
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值