追蹤
呆呆騰@簡單空間
關於部落格
這裡沒有艱澀的電腦辭彙,只有淺顯易懂的電腦資訊,和簡單的生活美食分享
  • 617876

    累積人氣

  • 25

    今日人氣

    1

    追蹤人氣

ASP.NET - Gridview匯出Excel簡易方式 & 指定為純文字樣式


基本語法
Dim sw As New System.IO.StringWriter
Dim hw As New System.Web.UI.HtmlTextWriter(sw)

Response.Clear()
Response.ContentEncoding = System.Text.Encoding.UTF8 '指定編碼
Response.AppendHeader("Content-Disposition", "attachment; filename=Excel1.xls") '指定匯出檔案名稱
Response.ContentType = "application/vnd.ms-excel" '指定檔案類型

GridView1.RenderControl(hw) '將Gridview Render出來
Response.Write(sw.ToString()) '將檔案輸出
Response.End()

但是這樣執行的話會出現
型別 'GridView' 的控制項 'GridView1' 必須置於有 runat=server 的表單標記之中。
的錯誤訊息,這時只要再加上副程式如下即可

Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
        '處理'GridView' 的控制項 'GridView' 必須置於有 runat=server 的表單標記之中
End Sub

更詳細的原理可參考這篇文章
使用 BasePage 來解決 GridView 執行 RenderControl 產生的錯誤

因為匯出的其實是文字檔,所以在開啟時會出現檔案支援性問題,只要點是即可"正常"開啟。

指定樣式為純文字
另外Excel很討厭的地方就是有時會自作聰明,把一些數字轉成科學符號,或是把最前面的0給去掉,這時只要再加上
Dim style As String = "<style> .text { mso-number-format:@; } </style> " '文字樣式字串

然後在Gridview的Rowdatabound事件中加上
If e.Row.RowType = DataControlRowType.DataRow Then
    e.Row.Cells(0).Attributes.Add("class", "text") '指定欄位為文字樣式
End If

出來的該欄位就會是純文字了。

參考資源
微軟msdn - GridView匯出Excel的問題
微軟msdn - Excel欄位資料顯示為純文字
相簿設定
標籤設定
相簿狀態