之前做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); }