使用OLEDB可以對excel文件進行讀取,我們只要把該excel文件作為數據源即可。
一 在D盤創建excel文件test.xls:

二 將工作表Sheet1的內容讀取到DataSet
代碼如下:
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屬性如:
代碼如下:
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即可
代碼如下:
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是哪一天就明白了吧。
這里解決辦法:
方法一:
代碼如下:
public static string getDateStr(string strValue)
{
int i = Convert.ToInt32(strValue);
DateTime d1 = Convert.ToDateTime("1900-1-1");
DateTime d2 = d1.AddDays(i - 2);
string strTemp = d2.ToString("d");
return strTemp;
新聞熱點
疑難解答
圖片精選