使用JSP在網頁上產生Excel檔案最正規的方法之一是採用Apache POI套件,可是若要更迅速的產生,其實是可以直接將內容以HTML的格式製作出來,幾個重點簡述如下。
- Excel能讀取HTML內容的格式而形成一般的試算表,開檔前會出現Excel檔案可能毀損的對話窗,因為我們產生的是XML格式而不是真正的儲存格,忽略這個警告即可能
- 輸出的表格只要用<table>、<tr>、<td>等標準HTML標籤形成。
- 數字型態的文字儲存格使用「="數字"」的格式以防被轉成數值。可適度 插入全形空白到標題字串裡,以免儲存格寬度過小
- 網頁使用UTF-8編碼,所有輸出內容皆轉換為UTF-8
範例
OutputStream os = response.getOutputStream(); String fmt = "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>"; String header = "<tr><td bgColor='lightYellow'>序號</td><td bgColor='lightYellow'>有效日期(起)</td>" + "<td bgColor='lightYellow'>有效日期(迄)</td>" + "<td bgColor='lightYellow'>編號</td></tr>"; String excelFilename = "test.xls"; try { response.setContentType("application/vnd.ms-excel; charset=UTF-8"); // attachment也可改用inline,試試不同效果 response.setHeader("Content-Disposition", "attachment; filename=\"" + excelFilename + "\""); os.write("<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">".getBytes("UTF-8")); os.write(header.getBytes("UTF-8")); for (int i=1; i <= 10; i++) { String row = String.format(fmt, i, "2015/07/15", "2015/12/31", "=\""+(i*100)+"\"); os.write(row.getBytes("UTF-8")); } os.write("</table>".getBytes("UTF-8")); } catch (Exception e) { os.write(("ERROR: " + e.getMessage()).getBytes("UTF-8")); } finally { if (os != null) os.close(); }
##
您可能也會有興趣的類似文章
- Java: 使用jCIFS存取遠端網路磁碟機的檔案 (0則留言, 2015/05/20)
- Java: 討人厭的SOAP Web Service;使用SoapUI解決 (0則留言, 2015/05/31)
- Servlet 3.0的檔案上傳寫法 (2則留言, 2012/06/19)
- 以Scribe-java實作Google OAuth 2.0的認證機制 (0則留言, 2013/02/19)
- 使用IntelliJ IDEA 12的Android UI Designer輕鬆寫Android App (1則留言, 2012/08/09)
- 解決 iReport 升級後的問題 (1則留言, 2005/11/22)
- jTDS JDBC Driver在2012年10月釋出了能在JDK 1.7運行的1.3.0版 (0則留言, 2013/01/16)
- 開源的專案管理工具:GanttProject與OpenProj (3則留言, 2007/08/18)
- [jEdit] 使用BeanShell巨集自行擴充功能 (0則留言, 2007/11/17)
- 修正以Apache POI產生Excel數值型文字的問題 (0則留言, 2014/08/22)
- [Java] 在jar檔裡搜尋特定類別的工具 (0則留言, 2007/09/03)
- 取得iReport / JasperReports報表內特定元件的方法 [修訂] (5則留言, 2011/10/17)
- SVN2CL: 自動產生變動紀錄的腳本–修改 (3則留言, 2006/08/23)
- [Java] 常用的IDEA Plugins (0則留言, 2005/06/02)
- 試用iReport 0.5.2 (2則留言, 2005/11/15)