C#自动判断Excel版本使用不同的连接字符串
程序员文章站
2023-01-11 08:14:37
用oledb通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的。...
用oledb通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的。
/// <summary> /// 把数据从excel装载到datatable /// </summary> /// <param name="pathname">带路径的excel文件名</param> /// <param name="sheetname">工作表名</param> /// <param name="tbcontainer">将数据存入的datatable</param> /// <returns></returns> public datatable exceltodatatable(string pathname, string sheetname) { datatable tbcontainer = new datatable(); string strconn = string.empty; if (string.isnullorempty(sheetname)) { sheetname = "sheet1"; } fileinfo file = new fileinfo(pathname); if (!file.exists) { throw new exception("文件不存在"); } string extension = file.extension; switch (extension) { case ".xls": strconn = "provider=microsoft.jet.oledb.4.0;data source=" + pathname + ";extended properties='excel 8.0;hdr=yes;imex=1;'"; break; case ".xlsx": strconn = "provider=microsoft.ace.oledb.12.0;data source=" + pathname + ";extended properties='excel 12.0;hdr=yes;imex=1;'"; break; default: strconn = "provider=microsoft.jet.oledb.4.0;data source=" + pathname + ";extended properties='excel 8.0;hdr=yes;imex=1;'"; break; } //链接excel oledbconnection cnnxls = new oledbconnection(strconn); //读取excel里面有 表sheet1 oledbdataadapter oda = new oledbdataadapter(string.format("select * from [{0}$]", sheetname), cnnxls); dataset ds = new dataset(); //将excel里面有表内容装载到内存表中! oda.fill(tbcontainer); return tbcontainer; }
这里需要注意的地方是,当文件的后缀名为.xlsx(excel2007/2010)时的连接字符串是"provider=microsoft.ace.oledb.12.0;....",注意中间红色部分不是"jet"。
上一篇: 碱的N+1种小妙招