Quantcast
Channel: 簡睿隨筆
Viewing all articles
Browse latest Browse all 897

JSP快速產生Excel內容的方法

$
0
0

使用JSP在網頁上產生Excel檔案最正規的方法之一是採用Apache POI套件,可是若要更迅速的產生,其實是可以直接將內容以HTML的格式製作出來,幾個重點簡述如下。

  1. Excel能讀取HTML內容的格式而形成一般的試算表,開檔前會出現Excel檔案可能毀損的對話窗,因為我們產生的是XML格式而不是真正的儲存格,忽略這個警告即可能
  2. 輸出的表格只要用<table>、<tr>、<td>等標準HTML標籤形成。
  3. 數字型態的文字儲存格使用「="數字"」的格式以防被轉成數值。可適度 插入全形空白到標題字串裡,以免儲存格寬度過小
  4. 網頁使用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();
}


##

您可能也會有興趣的類似文章


Viewing all articles
Browse latest Browse all 897

Trending Articles