[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();
%>