NPOI Library(v.1.2.1) + DataReader,將資料表的資料,輸出到 Excel檔案內

摘要:NPOI Library + DataReader,將資料表的資料,輸出到 Excel檔案內





之前介紹過的兩篇文章,

       [轉貼]在 Server 端存取 Excel 檔案的利器:NPOI Library

      在 Server 端存取 Excel 檔案的利器:NPOI Library v1.21(改寫成VB範例)

 

 

有網友來信詢問,要從DB撈出資料,透過 NPOI輸出成 Excel File

其實一點都不難。

 

但兩者混合在一起,程式碼有點多而已。

有耐心試一下就會完成

 
 

以下範例使用的版本, NPOI v 1.21 for .NET 2.0

 

2011/11/30補充

[NPOI 1.2.4版]ASP.NET 輸出 Excel,同一列產生 [第一個格子]後,程式碼寫法有變。
http://www.dotblogs.com.tw/mis2000lab/archive/2011/11/30/npoi_v124_asp_net_export_excel_20111130.aspx

 

01 '----自己寫的(宣告)----
02 '----自己寫的(宣告)----
03 Imports System
04 Imports System.Web.Configuration
05 Imports System.Data
06 Imports System.Data.SqlClient
07
08 '== for Excel file Export ==
09 Imports System.IO
10 Imports NPOI.HSSF.UserModel
11 Imports NPOI.HPSF
12 Imports NPOI.POIFS.FileSystem
13 ‘==重點:您必須先加入參考,並且動手加入這些 NameSpace
14
15
16 Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
17     Dim workbook As HSSFWorkbook = New HSSFWorkbook()
18     Dim ms As MemoryStream = New MemoryStream()  '==需要 System.IO命名空間
19
20    '== 新增試算表 Sheet名稱。
21     Dim u_sheet As HSSFSheet = workbook.CreateSheet("My Sheet")
22
23
24
25 '============================================
26     '=======以下是 ADO.NET的範例(for DataReader寫法)=======
27     Dim Conn As New SqlConnection = SqlConnection (WebConfigurationManager.ConnectionStrings("存在Web.Config檔案裡面的連結字串").ConnectionString)
28     '----上面已經事先寫好 Imports System.Web.Configuration ----

29
30     Dim dr As SqlDataReader = Nothing
31     Dim cmd As New SqlCommand("select id,test_time,summary,author from test", Conn)
32
33     Try
34         Conn.Open()   '----連結DB
35         dr = cmd.ExecuteReader()   '----執行SQL指令,取出資料

36       '=====================================================
37         '== 利用迴圈,把資料寫入 Excel各個儲存格裡面。
38         Dim k As Integer = 0
39
40         While dr.Read()
 
41             For i = 0 To (dr.FieldCount - 1)  
42                 '-- FieldCount是指 DataReader每一列紀錄裡面,有幾個欄位。只能用在NPOI v.1.2.1版
43                  u_sheet.CreateRow(k).CreateCell(i).SetCellValue(
dr.GetValue(i).ToString())
44  
45                  '*** 把每一個欄位的值,寫到 Excel的每一個儲存格裡面
46                ‘*** 下面有圖片解說這兩個迴圈的作法。
47             Next

48             k = k + 1

49         End While
50        
'=====================================================
51
52     Catch ex As Exception   '---- 如果程式有錯誤或是例外狀況,將執行這一段
53             Response.Write("Error Message----" & ex.ToString())
54     Finally
55             If Not (dr Is Nothing) Then
56                 cmd.Cancel()
57                 '----關閉DataReader之前,一定要先「取消」SqlCommand
58                 dr.Close()
59             End If
60             If (Conn.State = ConnectionState.Open) Then
61                 Conn.Close()
62                 Conn.Dispose()
63             End If
64     End Try
65     '=======以上是 ADO.NET的範例(for DataReader寫法)=======
66       '============================================
67
68
69
70     workbook.Write(ms)
71
72     '== Excel檔名,請寫在最後面 filename的地方
73     Response.AddHeader("Content-Disposition", _
74 String.Format("attachment; filename=EmptyWorkbook_2_DB.xls"))
75     Response.BinaryWrite(ms.ToArray())
76
77     '== 釋放資源
78     workbook = Nothing   '== C#為 null
79     ms.Close()
80     ms.Dispose()
81 End Sub

82

 

成果如下圖:

     

 

以上只能用在 NPOI v.1.2.1版

 

2011/11/30補充

[NPOI 1.2.4版]ASP.NET 輸出 Excel,同一列產生 [第一個格子]後,程式碼寫法有變。
http://www.dotblogs.com.tw/mis2000lab/archive/2011/11/30/npoi_v124_asp_net_export_excel_20111130.aspx

 

範例由此下載(請注意 版本差異)

[NPOI 1.2.4版][下載]ASP.NET 輸出 Excel,範例下載。

 

很多「我這樣做,行不行?」的問題

其實,自己耐心去試一下,就可以完成囉

 

多多嘗試一下吧

就算出現錯誤,在排除的過程中,也能學到東西

 

 

 

2010/8/26補充:謝謝網友 瑪姬 提供下列建議

NPOI現在出到v1.2.3版, 也許是版本不同, 所以我試您範例的結果,
想要產出excel時, 當出現windows save as 視窗時, 檔案類型預設為 HTML,

要再加一行下面的字, 才會預設為 xls,

我同事試出來的結果, 他的經驗是2003不用設, 2005一定要, 礙於公司server的問題所以2010還沒試,
我想也許可加在文章上, 可以讓網友參考時少了許多測試時間,

Response.ContentType="application/vnd.ms-excel"
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=你的檔名.xls"))

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程,遠距教學 (Web Form 49hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程,遠距教學 (ASP.NET MVC 75hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

累積時數約 75小時...... 第一天(5.5小時)完整內容,"免費"讓您評估