苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 49201|回复: 13

[C#语言基础] C#导入Excel|读取Excel方法总结

[复制链接]
发表于 2013-2-22 10:32:18 | 显示全部楼层 |阅读模式
                                     C#导入Excel|读取Excel方法总结
1.  StreamReader 方法
这种方法一般不用,因为他读出来的是流,一般是转成字符串
代码如下:
[C#] 纯文本查看 复制代码
StreamReader sr = new StreamReader("文件名以及完整路径",System.Text.Encoding.Default);
            string data = sr.ReadToEnd();
            sr.Close();

2.OleDbConnection读取
最常 用的看下代码吧

[C#] 纯文本查看 复制代码
/**/
        /// <summary>
        /// 返回Excel数据源
        /// </summary>
        /// <param name="filename">文件路径</param>
        /// <param name="TSql">TSql</param>
        /// <returns>DataSet</returns>
        public static DataSet ExcelToDataSet(string filename, string TSql)
        {
            DataSet ds;
            string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;data source=" + filename;
            OleDbConnection myConn = new OleDbConnection(strCon);
            string strCom = TSql;
            myConn.Open();
            OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
            ds = new DataSet();
            myCommand.Fill(ds);
            myConn.Close();
            return ds;
        }


         使用方法如下,只要写Sql语句就行了
[C#] 纯文本查看 复制代码
/设置T_Sql
        string TSql = "SELECT  * FROM [sheel1$]";
        //读取数据
        DataTable table = ExcelToDataSet(fullPath, TSql).Tables[0];[/code]
在这种情况下大家一般都会碰到这样的问题
如果是动态导入很多Excel表格的时候,他们的表名可能不一样,总不能每次都输入一次表名吧,其它不需要的
只要用下面的方法就可以得到表名
请看代码
[code=csharp] /// <summary>
        /// 动态取Excel表名
        /// </summary>
        /// <param name="fullPath">文件路径</param>
        /// <returns></returns>
        public static string GetExcelFirstTableName(string fullPath)
        {
            string tableName = null;
            if (File.Exists(fullPath))
            {
                using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet." +
                "OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" + fullPath))
                {
                    conn.Open();
                    tableName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0][2].ToString().Trim();
                }
            }

            return tableName;
        }

修改上面的代码如下所示
[C#] 纯文本查看 复制代码
string tableName = GetExcelFirstTableName("文件 路径");
        //设置T_Sql
        string TSql = "SELECT  * FROM [" + tableName + "]";
        //读取数据
        DataTable table = ExcelToDataSet(fullPath, TSql).Tables[0];

问题解决了



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-6-10 17:02:16 | 显示全部楼层
如果是64位系统,用OleDbConnection读取。
要设置项目的目标平台为 x86,
用Any CPU会出现 “未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序”的错误
发表于 2013-6-25 21:08:39 | 显示全部楼层
接受了
回复

使用道具 举报

发表于 2013-7-31 23:39:38 | 显示全部楼层
强烈支持楼主ing……
发表于 2013-9-21 18:08:13 | 显示全部楼层
受教了,学习中……
发表于 2013-10-16 14:34:01 | 显示全部楼层
用NPOI就算没安装有office也能导入导出excel,而且速度快多了。http://tonyqus.sinaapp.com/tutorial(NPOI 1.2.5 教程)
发表于 2013-10-16 15:24:16 | 显示全部楼层
新手学习了!
  受教了,学习中……
发表于 2014-3-2 15:17:50 | 显示全部楼层
其实最简单的方法是用FarPoint控件来读取Excel文件
发表于 2014-6-27 11:33:36 | 显示全部楼层
非常感谢你帮了我的大忙,真的太感谢你啦!
发表于 2014-7-17 17:21:44 | 显示全部楼层
站长,我的这个问题您能帮忙解决一下吗?地址:http://www.sufeinet.com/thread-9480-1-1.html,是在silverlight程序中实现excel数据读取与导入功能
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-27 04:19

© 2014-2021

快速回复 返回顶部 返回列表