程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#如何讀取excel文件

c#如何讀取excel文件

編輯:C#入門知識

使用OLEDB可以對excel文件進行讀取,我們只要把該excel文件作為數據源即可。

一 在D盤創建excel文件test.xls:

\

二 將工作表Sheet1的內容讀取到DataSet

\ C#-Code:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;"+
    "Extended Properties=Excel 8.0";
DataSet ds = new DataSet();
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
oada.Fill(ds);

讀取的DataSet為:

\

從圖中可以看出excel文件中的第一行變成了DataSet中的列名,這正是系統的默認設置。

三 如果想把第一行也作為數據行,那我們可以給連接字符串添加一個HDR=No屬性

如:

\ C#-Code:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;"+
    "Extended Properties=Excel 8.0;HDR=No";
DataSet ds = new DataSet();
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
oada.Fill(ds);

結果也許會讓你有點想不到:

\

第一行的第一列和第三列都變成空的了,這是因為系統把第一列識別成了數字,把第三列識別成了日期,而第一行的數據不符合格式的要求,所以就變成空的了。

四 我們還可以把所有列都做為字符串來讀取,只要添加屬性IMEX=1即可

\ C#-Code:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;"+
    "Extended Properties=Excel 8.0;HDR=No;IMEX=1";
DataSet ds = new DataSet();
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
oada.Fill(ds);

結果又會如何呢?

\

是不是再次出乎你的意料,第三行的日期怎麼變成數字了,其實excel在轉換格式的時候就自動把日期變成數字了,那這個數字是怎麼來的呢 ? 如果你把日期改成1900年1月1日,那麼你可以看到他的轉換結果是1,以此類推,39902是哪一天就明白了吧。

五 也許你並不想讀取整個excel的內容

如果只想讀取前兩列可以用:select * from [Sheet1$A:B]

如果只想讀取A1到B2的內容,就用:select * from [Sheet1$A1:B2]

六 如果不知道工作表的名字或名字被人為修改了該怎麼辦呢?

我們可以通過索引來獲取指定工作表的名字,以下方法可以用來獲取工作表名稱的數組:

\ C#-Code:
ArrayList al = new ArrayList();
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;"+
    "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable sheetNames = conn.GetOleDbSchemaTable
    (OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
conn.Close();
foreach (DataRow dr in sheetNames.Rows)
{
    al.Add(dr[2]);
}
return al;
    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved