天天看點

java導出excel并儲存_Java POI導出Excel并使用輸出流下載下傳檔案彈出打開儲存框

@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();

workbook.dispose();

} catch (Exception e) {

e.printStackTrace();

response.sendRedirect("error.action");

log.error("系統錯誤", e.fillInStackTrace());

}

}

轉載自:https://www.cnblogs.com/shoose/p/7744443.html