之前做excel导出时,我都是先将文件写在服务器上,然后再下载下来,后来发现原来可以直接将文件写在输出流里边。
下面是一个小demo:
package com.huaqin.fcstrp.util; import java.io.IOException;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.net.URLEncoder; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet; public class WriteExcle { private HSSFWorkbook workbook = null; /** * * @param response 下载请求的response */ public void createExcel(HttpServletResponse response){ //创建workbook workbook = new HSSFWorkbook(); //添加Worksheet(不添加sheet时生成的xls文件打开时会报错) Sheet sheet1 = workbook.createSheet("sheet1"); OutputStream out = null; try { out = response.getOutputStream(); String fileName = "test.xls";// 文件名 response.setContentType("application/x-msdownload"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8")); Row row = workbook.getSheet("sheet1").createRow(0); //创建第一行 for(int i = 0;i < 10;i++){ Cell cell = row.createCell(i); cell.setCellValue("测试数据"+i); } workbook.write(out); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } }}
调用:
/** * 下载2 * @param request * @param response * @return * @throws FileNotFoundException */ @RequestMapping(value = "/download2") @ResponseBody public void download2(HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException { WriteExcel writeExcle = new WriteExcel(); writeExcel.createExcel(response); }