http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 27913|回复: 12

[Asp.Net] C#导入Excel|读取Excel方法总结

[复制链接]
发表于 2012-7-1 09:17:39 | 显示全部楼层 |阅读模式
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];

在这种情况下大家一般都会碰到这样的问题
如果是动态导入很多Excel表格的时候,他们的表名可能不一样,总不能每次都输入一次表名吧,其它不需要的

只要用下面的方法就可以得到表名

请看代码
[C#] 纯文本查看 复制代码
/// <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、爬虫相关、项目外包等点这里
发表于 2014-9-5 23:38:34 | 显示全部楼层
强烈支持楼主ing……
发表于 2014-3-29 11:33:34 | 显示全部楼层
还推荐几个读写excel的开源组件,自己在工作中用过的:
1.Excel Data Reader
http://exceldatareader.codeplex.com/

2.npoi
http://npoi.codeplex.com/
发表于 2017-7-13 15:34:10 | 显示全部楼层
老大,遇到个问题,当一个单元格内有换行时会出错,比如某个单元格内是数字7,在7之前有个换行(alt+enter)这时,7不会导入到datatable中。
发表于 2017-7-13 16:25:14 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2017-7-13 17:36:28 | 显示全部楼层
你用的什么方法导的。
我这个代码测试过并不存在你说的问题

发表于 2017-7-14 08:24:24 | 显示全部楼层
站长苏飞 发表于 2017-7-13 17:36
你用的什么方法导的。
我这个代码测试过并不存在你说的问题

用的是您的那个excelhelper~
 楼主| 发表于 2017-7-14 08:35:35 | 显示全部楼层
changchengt 发表于 2017-7-14 08:24
用的是您的那个excelhelper~

用这个文章里面的方法
发表于 2017-7-14 09:35:31 | 显示全部楼层
@站长苏飞  确实还是不行,结果如图片,数字7上面有个换行,站长大大帮忙看看
更多图片 小图 大图
组图打开中,请稍候......
 楼主| 发表于 2017-7-14 09:37:48 | 显示全部楼层
这个应该不是取不了,是看不到吧,有换行看不到的吧,你提取到string中查看一下。我昨天测试过是正常的。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-4-18 16:08

© 2014-2021

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