java workbook 保存_Java POI导出Excel并使用输出流下载文件弹出打开保存框

该代码示例展示了如何使用Java的POI库导出Excel数据,并通过HttpServletResponse输出流提供给用户下载。在内存中创建SXSSFWorkbook以避免内存溢出,设置列宽,创建标题和数据行,然后将文件写入响应流,允许用户弹出保存文件对话框。
摘要由CSDN通过智能技术生成

/**

* 导出Excel

* @author Saffi

*/

@RequestMapping("exportExcel.action")

public void exportExcel(HttpServletResponse response) throws IOException {

try {

// 查询并赋给List集合

List oddList = entityService.listExport();

// 在内存中创建一个Excel文件,通过输出流写到客户端提供下载

// 内存中保留 10000 条数据,以免内存溢出,其余写入 硬盘

SXSSFWorkbook workbook = new SXSSFWorkbook(10000);

// 创建一个sheet页

SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet("这是sheet名");

// 分别设置Excel列的宽度

sheet.setColumnWidth(0, 100 * 40);

sheet.setColumnWidth(1, 100 * 50);

sheet.setColumnWidth(2, 100 * 50);

// 创建标题

SXSSFRow headRow = (SXSSFRow) sheet.createRow(0);

headRow.createCell(0).setCellValue("编号");

headRow.createCell(1).setCellValue("时间");

headRow.createCell(2).setCellValue("单号");

// 遍历oddList集合

for (OddNunber odd : oddList) {

// 创建行

SXSSFRow dataRow = (SXSSFRow) sheet.createRow(sheet.getLastRowNum() + 1);

// 创建下标为0的Cell,并将其值设为查询结果中的编号

dataRow.createCell(0).setCellValue(odd.getOnid());

// 创建下标为1的Cell,并将其值设为查询结果中的日期

dataRow.createCell(1).setCellValue(odd.getOrecorddate());

// 创建下标为2的Cell,并将其值设为查询结果中的单号

dataRow.createCell(2).setCellValue(odd.getCustomernumber());

}

// 设置生成的Excel的文件名,并以中文进行编码

String codedFileName = new String("Excel名".getBytes("gbk"), "iso-8859-1");

response.setHeader("Content-Disposition", "attachment;filename=" + codedFileName + ".xlsx");

// 响应类型,编码

response.setContentType("application/octet-stream;charset=UTF-8");

// 形成输出流

OutputStream osOut = response.getOutputStream();

// 将指定的字节写入此输出流

workbook.write(osOut);

// 刷新此输出流并强制将所有缓冲的输出字节被写出

osOut.flush();

// 关闭流

osOut.close();

/*

* dispose of temporary files backing this workbook on disk 处理在磁盘上备份此工作簿的临时文件

* SXSSF分配临时文件,您必须始终清除显式,通过调用dispose方法

*/

workbook.dispose();

} catch (Exception e) {

e.printStackTrace();

response.sendRedirect("error.action");

log.error("系统错误", e.fillInStackTrace());

}

}

转载自:https://www.cnblogs.com/shoose/p/7744443.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值