C#自动判断Excel版本使用不同的连接字符串
用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的。
///
/// 把数据从Excel装载到DataTable
///
/// 带路径的Excel文件名
/// 工作表名
/// 将数据存入的DataTable
///
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"。相关阅读:
Win7系统添加打印机无Print Spooler服务无注册表解决方法
在linux中使用包管理器安装node.js
Bootstrap下拉菜单效果实例代码分享
基于js实现投票的实例代码
探讨.get .post .ajax ztree 还有后台servlet传递数据的相关知识
element.style覆盖样式因优先级顺序导致的解决方法
js与运算符和或运算符的妙用
编写安全 PHP应用程序的七个习惯深入分析
举例讲解C#中自动实现的属性
详述JavaScript实现继承的几种方式(推荐)
在支持HTML5的浏览器上运行WebGL程序的方法
css自适应宽度 多种方法实现宽度自适应的水平居中
24个canvas基础知识小结
Bootstrap每天必学之下拉菜单