2009年7月2日 星期四

ASP.NET匯出Excel時,指定欄位格式

在系統開發時,使用者通常會想要網頁提供匯出Excel的功能,在我們實作這個功能時常常會遇到格式的問題,譬如說在網頁上的手機欄位顯示是正常格式(09xxxxxxxx),但匯出Excel後居然變成9xxxxxxxx,底下的程式片段可避免格式跑掉
Response.Clear();
Response.Charset = "big5";
Response.AddHeader("Content-Disposition", "attachment;filename=myExcel.xls");
Response.ContentType = "application/vnd.ms-excel";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("big5");
Response.Write("<html><body>");
Response.Write("<meta http-equiv=Content-Type content=text/html; charset=big5>"); //避免亂碼
Response.Write("<style type=text/css>");
Response.Write("td{mso-number-format:\"\\@\";}"); //將所有欄位格式改為"文字"
Response.Write("</style>");
Response.Write("<table>");
.
.
.
Response.Write("</table>");
Response.Write("</body></html>");
上方的程式碼片段是讓匯出的Excel檔儲存格格式強制為文字。那如果有部份欄位需要數字的儲存格式該如何處理?
Response.Write("<td style=\"mso-number-format:'0\\.0'\">"+欄位內容值+"</td>");
主要的做法就是利用css定義整個Excel欄位的格式,再利用td的style做覆寫,至於詳細的欄位格式,可以參考這裡

3 則留言:

  1. 您好:
    可否設定轉出來的EXCEL每欄寬度呢?

    感謝

    回覆刪除
  2. 測試結果只需在td的style裡設定width的寬度即可,我的系統環境為winxp及office 2007。

    回覆刪除
  3. 想請問欄位內容值是指!?

    回覆刪除