[JSP] 使用POI匯出Excel,檔案下載 - 參考Code

  • 12588
  • 0
  • J2EE
  • 2011-11-27

[JSP] 使用POI匯出Excel,檔案下載 - 參考Code

1.存取Excel使用POI

2.檔案總管路徑為Linux作業系統

 


<%
/****************************************************************************************
* Author: 2011/9/9 by Shadow (.net工程師 囧rz)
****************************************************************************************/
%>
<%@ page contentType="text/html;" language="java" import="java.io.*" pageEncoding="Big5" %>
<%@ page  import="org.apache.poi.hssf.usermodel.*,org.apache.poi.hssf.util.HSSFColor" %>
<%@ page import="java.text.SimpleDateFormat"%>

<%
    /**
     ** 要注意pageEncoding整個系統都要一致
     **/

//取得網站目錄的檔案總管路徑,例://usr/local/tomcat5/webapps/MyWeb/
String WebDirPath = request.getRealPath("/");
//取得事先做好的Excel範例格式檔案
String ExcelSampleFilePath = WebDirPath + "excel/export_service_hours_ministry_excelSample.xls";

  FileInputStream  fs  = new FileInputStream(ExcelSampleFilePath);
  HSSFWorkbook  wb         = new HSSFWorkbook(fs);
  fs.close();
  
  //取得第一個sheet
  HSSFSheet     sheet1     = wb.getSheetAt(0);
  HSSFRow       row          = null;                  //列
  HSSFCell        cell           = null;                  //格
  
  
   //設定第一種 儲存格 的 屬性 cellStyle 宣告樣式
   HSSFCellStyle cellStyle  = wb.createCellStyle();
   cellStyle.setWrapText(true);  //儲存格自動換列  cellStyle
   
  //以下開始塞資料
  row = sheet1.createRow(0);  //索引都是從0開始算起
  cell = row.createCell((short)0);
  cell.setCellValue("Hello World!!\n點部落格");
  sheet1.autoSizeColumn((short)0); //配合文字縮放cell寬度
  //結束塞資料
  
   //儲存 excel 暫存檔
  String ExcelTempFilePath ="temp/export_service_hours_ministry_excelTemp.xls";
   FileOutputStream fos =new FileOutputStream(WebDirPath + ExcelTempFilePath);
   wb.write(fos);
   fos.close();
   
   //=============取得TEMP檔案========================================================//
   FileInputStream fis = new FileInputStream(WebDirPath + ExcelTempFilePath);

  SimpleDateFormat SDF = new SimpleDateFormat("yyyyMMdd_HHmmss"); //日期格式
  String fileNameDate = SDF.format(new java.util.Date());//把今天的日期格式化字串
  String filename = fileNameDate + "_sfle060.xls";

   //準備讓使用者下載檔案
   out.clear();
   //一定要加charset=iso-8859-1,否則文件內容會亂碼
   //參考:http://www.west263.com/info/html/chengxusheji/Javajishu/20080225/33537.html
   response.setContentType("application/octet-stream; charset=iso-8859-1;");
   response.setHeader("content-disposition","attachment; filename="+filename);

   int byteRead;//設定int,等一下要讀檔用的

    //fis.read()會開始一個byte一個byte讀檔,讀到的byte傳給byteRead		
    //若fis.read()傳回-1,表示讀完了

    while(-1 != (byteRead = fis.read()))
      {
        out.write(byteRead);
      }
    fis.close();


%>