最近一直在處理工作表的問題,其間用到了C#讀取表中資料的問題,其方法如下:
using Data=System.Data;
/// <summary> /// 擷取某個工作表中的資料 /// </summary> /// <param name="fileName">檔案名稱及路徑</param> /// <param name="queryWorkSheetName">查詢的工作表</param> /// <returns>擷取到的資料</returns> public Data.DataTable GetDataFromWorkSheet(string fileName, string queryWorkSheetName) { Data.DataTable dtResult = null; string ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=No; IMEX=1;\""; string query = "select * from [" + queryWorkSheetName + "$]"; try { using (OleDbCommand oleCommand = new OleDbCommand(query, new OleDbConnection(string.Format(ConnStr, fileName)))) { using (OleDbDataAdapter oleAdapter = new OleDbDataAdapter(oleCommand)) { Data.DataSet myDataSet = new Data.DataSet(); oleAdapter.Fill(myDataSet); dtResult = myDataSet.Tables[0]; } } } catch { dtResult = null; } return dtResult; }
以上的方法,將一個工作表中的資料讀取到了DataTable,但有一點需要注意:
假設一個表中的前4行沒有資料,從第五筆開始有資料,那返回的DataTable中第一筆就是該工作表中的第五筆,即唯讀取有資料的筆,在列上也是如此,在注意這一種的時候也需要注意:如果一表中前3列沒有資料,第4~5列有資料,第6列沒有資料,第七列有資料,讀取到DataTable中後,該表的前3列被拋棄,但第6列不會被拋棄,因為它的左右兩列都有資料。