Asp.net - 轉Excel (NPOI)

.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,希望多多少少能幫助到人。

Source code Download