close
這次, 要將 Gridview 轉成 Excel,

# 需求一

將其中一個數字欄位以文字方式顯示,

就是,.. "8991380211310", 通常會出現科學記數 "8.99138E+12",

或者,.."009999", 會變成 "9999", 因為被當成數字, 所以前置0消失了,

在樣式裡, 要這麼設 .text { mso-number-format:\@; }

然後再指定欄位的CSS~ (請參考以下範例)

# 需求二

新增一個需求, 就是
, 是EXCEL裡的 Alt+Enter (換行)

試了老半天, 能用的換行字元, 全都沒用, 超想翻桌...><#

後來終於試出來了,原來利用樣式設定就能解決..囧

在樣式裡, 要這麼設 br{mso-data-placement:same-cell;}

# 寫好一個 Gridview 轉 Excel 的 function
Sub ReportExcel(ByVal objGridView As Control)
  Response.AddHeader("content-disposition", "attachment; filename=xxx.xls")
Response.ContentType = "application/vnd.ms-excel"
Dim tw As System.IO.StringWriter = New System.IO.StringWriter()
Dim hw As HtmlTextWriter = New HtmlTextWriter(tw)
objGridView.RenderControl(hw)
Response.Write("")
Response.Write(tw.ToString())
Response.End()
End Sub

# 在 RowDataBound 時, 設定該欄位的Css (當然你也可以直接在gridview裡設)
Protected Sub gv_RowDataBound(xxx) Handles gv.RowDataBound
  If (e.Row.RowType = DataControlRowType.DataRow) Then
    e.Row.Cells(2).Attributes.Add("class", "text")
  End If
End Sub

# 在按下『匯出』按鈕時, 呼叫ReportExcel(gridview)

# 會發現按下『匯出』時,
出現 「型別 'GridView' 的控制項 'gv' 必須置於有 runat=server 的表單標記之中」
所以要在空白處再加入
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)

End Sub


# 需求三: 亂碼了

只要加一行就可以了噢!

Response.ContentEncoding = System.Text.Encoding.GetEncoding("big5")


# 需求四:

二個空白顯示一個空白的問題,

將二個空白「__」取代成「  」,

但光這樣是不夠的,會發現儲存格上是二格,但EXCEL的值卻顯示一格,

所以要再加上「style='mso-spacerun: yes'」,這樣就完成囉!

.Replace("  ", "  ")

以上,..OK~~

相關閱讀::
 [asp.net]Excel轉檔-神奇的前8列
 [asp.net]EXCEL轉檔讀取

arrow
arrow
    全站熱搜

    張小芸 發表在 痞客邦 留言(0) 人氣()