[ASP.Net] 設定Gridview匯出Excel之欄位格式

  • 14443
  • 0

[ASP.Net] 設定Gridview匯出Excel格式

在網頁上針對Gridview的資料欄位做匯出Excel檔案時,

通常會使用Response的方式輸出,並指定Header為 "application/ms-excel"

(可參考擴展 GridView 控制項 - 支援 Excel 及 Word 匯出)

 

但最近在匯出檔案時,卻遇到一個特殊的狀況,

因為使用者要求所有的資料顯示必須是民國年,格式如下

98年6月12日

但開啟匯出之後的Excel檔案,

卻發現會自動被Excel轉換成

1998年6月12日

可以發現是因為Excel自動幫我們將字串轉換為日期的格式了,

所以如果我們不希望Excel將字串自動做判斷的話,

我們就必須針對該欄位設定格式,來告訴Excel

 

上網查了一下資料,發現我們只需要在CSS加上欄位格式就可以了

如果原本的Template欄位長的像這樣

<asp:TemplateField HeaderText="日期">
    <ItemTemplate>                            
         <%# DataBinder.Eval(Container.DataItem, "DateTime")%>         
    </ItemTemplate>
</asp:TemplateField>

我們只需要設定欄位的CSS中設定字串的格式,如下

 

<asp:TemplateField HeaderText="日期">
    <ItemTemplate>
         <span style="vnd.ms-excel.numberformat: @">                            
             <%# DataBinder.Eval(Container.DataItem, "DateTime")%>         
         </span>
    </ItemTemplate>
</asp:TemplateField>

所匯出的Excel檔案就可以正確的顯示了

98年6月12日

附上一些常用的格式

  • 文本:vnd.ms-excel.numberformat:@
  • 日期:vnd.ms-excel.numberformat:yyyy/mm/dd
  • 數字:vnd.ms-excel.numberformat:#,##0.00
  • 貨幣:vnd.ms-excel.numberformat:¥#,##0.00
  • 百分比:vnd.ms-excel.numberformat: #0.00%

 

參考資料

Web頁面的數據導出excel時的格式問題