要求:导入excl引用了using System.Data.OleDb,需要安装一个office

Microsoft.ACE.OLEDB.12.0 office7以上版本

Microsoft.Jet.OLEDB.4.0 office低版本

#region 读取Excel数据到DataSet 阳希 2015-11-21

/// <summary>
/// 读取Excel数据到DataSet
/// </summary>
/// <param name="filepath">excel带路径</param>
/// <param name="tabindex">取第几个表</param>
/// <param name="hdr">第一行是列名而不是数据</param>
/// <returns>dataset</returns>
protected DataSet ReadExcel(string filepath, int tabindex, string hdr)
{
string meg = "";
DataSet ds;
string strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='{0}';Extended Properties='Excel 12.0;HDR=" + hdr + ";IMEX=1'";
string strConnection1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=" + hdr + ";IMEX=1'";
//备注: "HDR=yes;"是说Excel文件的第一行是列名而不是数据,"HDR=No;"正好与前面的相反。
// "IMEX=1 "如果列中的数据类型不一致,使用"IMEX=1"可必免数据类型冲突。
strConnection = string.Format(strConnection, filepath);

string msgConst = "打开excel连接字符串错误,解决方法:1安装offic2010+,2更改c/windows/temp文件夹权限为everyone完全控制";

try
{
OleDbConnection con = new OleDbConnection(strConnection);
try
{
con.Open();
DataTable schema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
//下面取得表名

string strTableName = schema.Rows[tabindex]["TABLE_NAME"].ToString();
strTableName = strTableName.Substring(0, strTableName.IndexOf('$') + 1);
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + strTableName + "]", con);
ds = new DataSet();
da.Fill(ds);
da.Dispose();
return ds;
}
catch (Exception exmsg1)
{
string strMsg = msgConst + exmsg1;
throw new Exception(strMsg);

}
finally
{
con.Close();
}

}
catch (Exception ex)
{

try
{

OleDbConnection con = new OleDbConnection(string.Format(strConnection1, filepath));
try
{
con.Open();
DataTable schema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
//下面取得表名

string strTableName2 = schema.Rows[tabindex]["TABLE_NAME"].ToString();

strTableName2 = strTableName2.Substring(0, strTableName2.IndexOf('$') + 1);
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + strTableName2 + "]", con);
ds = new DataSet();
da.Fill(ds);
da.Dispose();
return ds;
}
catch (Exception exmsg2)
{
string strMsg2 = msgConst + exmsg2;
throw new Exception(strMsg2);
}
finally
{
con.Close();
}

}
catch (Exception ex1)
{

throw new Exception("连接方案2错误1:" + ex1.Message + " 错误2:可能文件名错误");
}

}

}
#endregion

C#读取excl(兼容office多种版本)的更多相关文章

  1. AngularJS开发指南7:AngularJS本地化,国际化,以及兼容IE低版本浏览器

    AngularJS本地化,国际化 国际化,简写为i18n,指的是使产品快速适应不同语言和文化. 本地化,简称l10n,是指使产品在特定文化和语言市场中可用. 对开发者来说,国际化一个应用意味着将所有的 ...

  2. Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法

    参考:Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法 Vs2012的下载地址: https://msdn.microsoft.com/en ...

  3. position:fixed 兼容浏览器低版本

    项目中遇到的坑,写篇博客做个笔记纪念下,position: fixed一般来说都兼容各个浏览器,但是要兼容浏览低版本问题,就得用-webkit-transform: translateZ(0);这段代 ...

  4. [转帖]Office全版本零售版转换VOL

    Office全版本零售版转换VOL https://blog.51cto.com/10981246/2062137 转成bat 执行 改天试试   @ECHO OFF&PUSHD %~DP0 ...

  5. 如何判断win10 和office的版本

    1:区分win10的版本 2:查询office 的版本

  6. 使用socket.io client 开发时兼容IE低版本的办法

    使用socket.io client 开发时兼容IE低版本的办法 socket.io提供了针对各个版本浏览器的‘socket’功能的封转:websocket,长连接,流,flash什么的.给你格式化下 ...

  7. java使用POI实现excel文件的读取,兼容后缀名xls和xlsx

    需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --&g ...

  8. html5调用本机摄像头兼容谷歌浏览器高版本,谷歌浏览器低版本,火狐浏览器

    做这个功能的时候在网上查了一些资料,代码如下,在这个代码在谷歌浏览器46版本是没问题的,在火狐浏览器也行,但是在谷歌浏览器高版本下是不兼容的 <div id="body"&g ...

  9. WebSocket兼容到低版本浏览器

    就目前而言,WebSocket是最好的Web通信解决方案了.但是IE从10才开始兼容它,对于目前大量IE8存在的市场,原生的WebSocket显然不太实用,我们需要低版本兼容的解决方案.于是我模拟We ...

随机推荐

  1. 开关调色新世界BP2888电源解决方案

    LED智能方案经过几年的拼杀,已经风靡照明界.但人们渐渐发现,对照明来说,一味追求花哨的功能并不被市场所认同,而其中开关调色,以其简单易操作的特点,已逐步融入广大消费者的生活习惯中.对吸顶灯,面板灯等 ...

  2. 关于php中id设置自增后不连续的问题

    alter table tablename drop column id;alter table tablename add id mediumint(8) not null primary key ...

  3. python基础学习笔记

    #!/usr/bin/env python #coding=utf-8 def login(username): if username=='bill': return 1 else: return ...

  4. Java经典编程题50道之一

    有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? public class Example01 {    publi ...

  5. SQL写操作 设置内容 (数组转字符串)

    SQL写操作 设置内容 (数组转字符串) SQL set内容 SQL操作数组转字符串 SQL写操作 set内容 (数组转字符串) [ 封装方法 ] function getSqlSet( $data ...

  6. ECS_8080端口连接拒绝问题排查

    原文链接 用户ECS网络设置 上图是用户ECS的网络示意图: ecs处于vpc网络下 ecs加入了一个安全组,该安全组出入方向均开放8080端口 ecs有两个网卡,一个私网主网卡(有虚线的网卡),一个 ...

  7. python 获取utc时间转化为本地时间

    import datetime timenow = (datetime.datetime.utcnow() + datetime.timedelta(hours=8)) timetext = time ...

  8. ThinkPHP5.0更改框架的验证方法对象->validate(true)->save();

    我们更希望看到: // 新增对象至数据表 $result = $Teacher->validate(true)->save(); 而不是: // 新增对象至数据表 $result = $T ...

  9. js添加多个样式属性cssText

    document.getElementById("box").style.cssText += ";color:red;font-size:20px"; 代码分 ...

  10. 移动端设置fixed布局的问题解决

    最近写移动端,遇到一个问题就是用fixed属性布局的时候由于手机的原因会出现很多问题,比如说手机端底部固定一块,然后里面有输入框,(类似于手机QQ或者微信底部的输入框一样的布局)这个时候在调用软键盘的 ...