[ClosedXML、EPPlus] Export Excel file (.xlsx) from GridView

  • 1502
  • 0

GridView 轉出 Excel 有幾種方法

 

1. 用 RenderControl() 轉出 HtmlTextWriter ,Response出來 不過只能轉出 .xls 檔 (程式碼在這)

2. 用 ClosedXML 轉出 MemoryStream , 一樣 Response 出來,可轉出 .xlsx 檔 (程式碼在這)  (這裡有 ClosedXML 的用法)

3. 用 EPPlus 轉出 MemoryStream,一樣 Response 出來,可轉出 .xlsx 檔 (程式碼在這)

我最後是用了我常用的 EPPlus 

動機

我一開始想的很美好,想說 用 GridView 轉出 Excel,這樣轉出的 Excel 格式就會和 GridView 一樣。

結果發現就算用GridView 轉出 HtmlTextWriter ,卻沒辦法把表格框線樣式、背景底色、字型顏色等格式一起轉出,只能轉文字。

所以試到最後還是用原先的 EPPlus,再一行一行設定格式。

說明

第一個方法最需要注意的就是 VerifyRenderingInServerForm 這個 function 一定要加,不然會和我一樣,遇到以下錯誤:

這個錯誤真的是讓我看得霧煞煞。因為我明明就把 GridView 放在 runat=server 的 Form 裡面啦。爬了文才知道要加 VerifyRenderingInServerForm 。

第二種方法 用 ClosedXML 轉出 MemoryStream 以後,會轉出表格格式的EXCEL,EPPlus則是會轉出一般格式的EXCEL。

以上