現在主流的Excel文檔有2003和2007
c#獲取 Excel2003 連接字符串
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" +
filepath + ";" + "Extended Properties=Excel 8.0;"; //filepath為Excel文件的路徑
Excel2003 連接方式只可以操作Excel2003的文檔
c# 獲取Excel2007 連接字符串
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + filepath + ";Extended Properties='Excel 12.0; HDR=YES; IMEX=1'";
Excel2007 連接方式可以操作Excel2007、Excel2003的文檔
使用Excel2007 連接有時候需要先從微軟的官網下載Excel2007的驅動,下載地址如下:
http://www.microsoft.com/zh-cn/download/details.aspx?id=13255
連接字符解析
HDR
NO 無字段,即從Excel取得的表格中不包含列標題
如果您在連接字符串中指定 HDR=NO,Jet OLE DB 提供程序將自動為您命名字段(F1 表示第一個字段,F2 表示第二個字段,依此類推);
yes 有字段,默認excel表中第1行為列標題
IMEX=1 通知驅動程序以文本格式讀取混合型的列(如數字、日期、字符串等)。需要注意的是,這個選項可能會導致Excel文件的寫入拒絕
IMEX有三個可選的值:0,1和2,默認是0; 微軟是這樣解釋的:
0 is Export mode -------導出模式(從Excel文件讀取數據時使用)
1 is Import mode -------導入模式(向Excel文件插入數據時使用)
2 is Linked mode (full update capabilities) -----Linked模式(需要完全更新Excel文件時使用)
Excel8.0指Excel的驅動版本,從Excel97到2003都用這個,Excel2007中開始用Excel12.0;

public static System.Data.DataSet ExcelSql(string filepath, string tablename) { string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filepath + ";" + "Extended Properties=Excel 8.0;"; OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); //返回Excel的架構,包括各個sheet表的名稱,類型,創建時間和修改時間等 DataTable dtSheetName = conn.GetOleDbSchemaTable( OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //包含excel中表名的字符串數組 string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) { strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); } DataTable dt = new DataTable(); DataSet ds = new DataSet(); //從指定的表明查詢數據,可先把所有表明列出來供用戶選擇 OleDbDataAdapter odda = new OleDbDataAdapter("select * from [" + strTableNames[0].ToString() + "]", conn); //("select * from [Sheet1$]", conn); odda.Fill(ds, "[" + tablename + "$]"); conn.Close(); return ds; }

/// <summary> /// 連接Excel 讀取Excel數據 並返回DataSet數據集合 /// </summary> /// <param name="filepath">Excel服務器路徑</param> /// <param name="tableName">Excel表名稱</param> /// <returns></returns> public static System.Data.DataSet ExcelSqlConnection(string filepath, string tableName) { string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + filepath + ";Extended Properties='Excel 12.0; HDR=YES; IMEX=1'"; //此連接可以操作.xls與.xlsx文件 OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); DataSet ds = new DataSet(); //返回Excel的架構,包括各個sheet表的名稱,類型,創建時間和修改時間等 DataTable dtSheetName = conn.GetOleDbSchemaTable( OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //包含excel中表名的字符串數組 string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) { strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); } OleDbDataAdapter odda = new OleDbDataAdapter("select * from ["+strTableNames[0].ToString()+"]", conn); //("select * from [Sheet1$]", conn); odda.Fill(ds, "[" + tableName + "$]"); conn.Close(); return ds; }
c#操作Excel:
http://www.cnblogs.com/SunYu/archive/2010/04/27/1722471.html