苏飞论坛

标题: C#导入Excel|读取Excel方法总结 [打印本页]

作者: 站长苏飞    时间: 2013-2-22 10:32
标题: C#导入Excel|读取Excel方法总结
                                     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];

问题解决了


作者: 依然在飞翔    时间: 2013-6-10 17:02
如果是64位系统,用OleDbConnection读取。
要设置项目的目标平台为 x86,
用Any CPU会出现 “未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序”的错误
作者: 秋日的枫叶    时间: 2013-6-25 21:08
接受了
作者: Mr_King    时间: 2013-7-31 23:39
强烈支持楼主ing……
作者: kyozy    时间: 2013-9-21 18:08
受教了,学习中……
作者: becklee    时间: 2013-10-16 14:34
用NPOI就算没安装有office也能导入导出excel,而且速度快多了。http://tonyqus.sinaapp.com/tutorial(NPOI 1.2.5 教程)
作者: 小浪子    时间: 2013-10-16 15:24
新手学习了!
  受教了,学习中……
作者: xinlingxiaosui    时间: 2014-3-2 15:17
其实最简单的方法是用FarPoint控件来读取Excel文件
作者: 学习抓包的    时间: 2014-6-27 11:33
非常感谢你帮了我的大忙,真的太感谢你啦!
作者: 麦兜兜    时间: 2014-7-17 17:21
站长,我的这个问题您能帮忙解决一下吗?地址:http://www.sufeinet.com/thread-9480-1-1.html,是在silverlight程序中实现excel数据读取与导入功能
作者: wtujoxk    时间: 2014-7-28 16:39
非常感谢你帮了我的大忙,真的太感谢你啦!
作者: roby_tao    时间: 2014-8-1 16:46
这个方法正式我需要的
作者: keating100    时间: 2014-10-15 22:21
感谢您的无私奉献,真是帮了我的大忙了
作者: vaseful    时间: 2015-5-11 23:55
csv格式的excel会报错,怎么解决呢




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4