2015年2月9日 星期一

[C#] How to get Excel data

同事請我幫忙寫個小工具,可以從Excel表裡面讀出還有哪些人的機台設備尚未歸還,並且自動寄信給他們提醒歸還。所以我上網撈別人的方法,整理並實作出這個小工具。此文章介紹此工具中的兩個部份,第一部份是將Excel檔案變成C#裡面使用的DataTable,第二部份則是從DataTable去取得所需要的資料。


第一部份:將Excel檔案變成C#裡面使用的DataTable
  1. 加入所需的函式庫
  2. 讀取一個Sheet的內容,下面範例使用TextBox來設定Excel檔案名稱,以及檔案裡面的Sheet名稱(一般新建Excel檔的預設名稱是Sheet1)。另外需要使用SQL語法來設定要讀取資料的過濾方式
  3. 接著實作自訂的函式GetExcelDataTable,此函式回傳值就是一個DataTable。其目的在於將指定的Excel檔案與SQL語法指定的Sheet來將此Sheet內容全部搬到C#中常用的DataTable變數裡面
  4. 在函式GetExcelDataTable()內,OleDbConnection物件(必須要有第一步驟所加的函式庫)會去使用微軟的一個資料庫工具,此工具下載點為:
    https://www.microsoft.com/en-us/download/details.aspx?id=13255
  5. 整個GetExcelDataTable()的實作方式如下:
  6. 如此一來,DataTable dt就能紀錄著指定的Excel Sheet的全部內容


第二部份:自DataTable取得Sheet指定欄位的資料
  1. 以下使用笨方法來取得每一行所指定的列資料,而不是直接取得A3、F7這種指定位置的資料
  2. 為DataTable建立讀取用的reader。接著使用reader.HasRows判斷是否有讀到東西,然後才透過Read()將每一行讀回來,While迴圈裡的每一次都會移動到下一行。此範例是分別讀取每一行的E-Mail列與Name列的內容。只要將email和name兩參數儲存起來就可以建立整理過的資料
  3. 有趣的是DataTable怎麼知道那一列是叫做E-Mail列?那一列又叫做Name列?當初透過OleDb提供的函式將Excel轉換成DataTable的時候,函式會參考最先有值的那一行內容當作「列」的索引,因此使用上述程式解析下圖Excel資料後,將可讀出各三筆E-Mail和Name

沒有留言:

張貼留言