C#自动判断Excel版本使用不同的连接字符串
用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的。
///<summary> ///把数据从Excel装载到DataTable ///</summary> ///<paramname="pathName">带路径的Excel文件名</param> ///<paramname="sheetName">工作表名</param> ///<paramname="tbContainer">将数据存入的DataTable</param> ///<returns></returns> publicDataTableExcelToDataTable(stringpathName,stringsheetName) { DataTabletbContainer=newDataTable(); stringstrConn=string.Empty; if(string.IsNullOrEmpty(sheetName)){sheetName="Sheet1";} FileInfofile=newFileInfo(pathName); if(!file.Exists){thrownewException("文件不存在");} stringextension=file.Extension; switch(extension) { case".xls": strConn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+pathName+";ExtendedProperties='Excel8.0;HDR=Yes;IMEX=1;'"; break; case".xlsx": strConn="Provider=Microsoft.ACE.OLEDB.12.0;DataSource="+pathName+";ExtendedProperties='Excel12.0;HDR=Yes;IMEX=1;'"; break; default: strConn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+pathName+";ExtendedProperties='Excel8.0;HDR=Yes;IMEX=1;'"; break; } //链接Excel OleDbConnectioncnnxls=newOleDbConnection(strConn); //读取Excel里面有表Sheet1 OleDbDataAdapteroda=newOleDbDataAdapter(string.Format("select*from[{0}$]",sheetName),cnnxls); DataSetds=newDataSet(); //将Excel里面有表内容装载到内存表中! oda.Fill(tbContainer); returntbContainer; }
这里需要注意的地方是,当文件的后缀名为.xlsx(excel2007/2010)时的连接字符串是"Provider=Microsoft.ACE.OLEDB.12.0;....",注意中间红色部分不是"Jet"。