.Net 轉 Excel
之前有篇文章提到轉Excel ,網友有提到NPIO的元件,當初我還很懶惰的回答,能不能塞進DataTable就直接轉出,
又由於當時的要求是希望將畫面上的背景色等相關預設值都轉出,因此用了之前的方式,不過回歸正常轉出Excel的方式
很多人還是推建這個DLL,今天趁著有空試做了如下,把DataTable塞進該程序中就可以完成轉出了。
首先先將NPOI套件下載,並且把解壓縮後的五個DLL都加入參考至專案中。
然後我在官方網站中找到此篇,自己再從網路上文章東爬西爬,修改了一下就完成如下了。
此段程式複製過去就可以馬上使用囉 ☺
呼叫時候 (DT是有資料的Datatable)
'先將Namespace載入
Imports NPOI.XSSF.UserModel '.xlsx
Imports NPOI.HSSF.UserModel '.xls
export_excel(DT)
Sub export_excel(ByVal obj As Object, Optional ByVal sFilename As String = "Default", Optional ByVal SheetName As String = "defalut", Optional ByVal iVersion As Integer = 0)
'HSSF用來產生Excel 2003檔案 .xls
Dim workbook As New HSSFWorkbook
'XSSF用來產生Excel 2007檔案 .xlsx
'Dim workbook As New XSSFWorkbook
'建立Sheet
Dim sheet As System.Object = workbook.CreateSheet(SheetName)
Dim DT As New DataTable
DT = CType(obj, DataTable)
Dim Rowindex As Integer = 1
For Each row As DataRow In DT.Rows
Dim dataRow As System.Object = sheet.CreateRow(Rowindex)
For Each column As DataColumn In DT.Columns
dataRow.CreateCell(column.Ordinal).SetCellValue(row(column).ToString)
Next
Rowindex += 1
Next
'Create Memory
Using ms As New System.IO.MemoryStream
workbook.Write(ms)
Response.AddHeader("Content-Disposition", String.Format("attachment; filename = " & sFilename & ".xls"))
Response.BinaryWrite(ms.ToArray())
workbook = Nothing
End Using
End Sub
最後畫面如下
我一直想找方法讓兩種版本的excel兼容,不過目前暫時先寫死為.xls檔
有機會之後在把兼容的版本放上,把這段封裝至共用區後,以後就方便
各頁面轉出。
另外我還異想天開的在猜想把此段做成Web service供給各系統使用(下次測試)
受到網路上很多人的幫助及分享,因此也把Source share,希望多多少少能幫助到人。