本方法,将传入的Excel文件内所有的Sheet内的数据都填充入DataSet中。这是一个简单快捷的方法,不足之处是不适合带有格式复杂的Excel文件。(比如:有合并单元格的)

  1. public class ExcelUtil
  2. {
  3. /// <summary>
  4. /// 从Excel文件导入DataSet
  5. /// Excel的连接字符串说明(详细参看 http://www.connectionstrings.com/excel ):
  6. /// HDR=Yes 表示第一行是表头,没有数据,读取时忽略第一行。设置为 No 时则从第一行读取。
  7. /// IMEX=1  表示告诉OleDb驱动,所有数据将作为字符串读取(numbers,dates等)
  8. /// 注意:有时候因为ISAM驱动没有安装,设置HDR和IMEX会出异常。去掉即可。
  9. /// </summary>
  10. /// <param name="fileName">Excel文件路径</param>
  11. /// <param name="firstRowIsHeader">第一行是否是表头</param>
  12. /// <returns>Excel数据,一个Sheet对应一个DataTable</returns>
  13. public static DataSet GetDataSetFromExcel(string fileName, string sheetName = "", bool firstRowIsHeader = true)
  14. {
  15. if (!System.IO.File.Exists(fileName))
  16. throw new ArgumentException("file is not exist!");
  17. var ds = new DataSet();
  18. var strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties=Excel 8.0;";
  19. //if (firstRowIsHeader)
  20. //    strConn += "HDR=Yes;";
  21. strConn = string.Format(strConn, fileName);
  22. using (var conn = new OleDbConnection(strConn))
  23. {
  24. conn.Open();
  25. DataTable excelSchema = null;
  26. string sql = "select * from [{0}]";
  27. var adapter = new OleDbDataAdapter();
  28. adapter.SelectCommand = conn.CreateCommand();
  29. if (string.IsNullOrEmpty(sheetName))
  30. {
  31. excelSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
  32. new object[] { null, null, null, "TABLE" });
  33. foreach (DataRow row in excelSchema.Rows)
  34. {
  35. var sheet = row["TABLE_NAME"].ToString();
  36. sql = string.Format(sql, sheet);
  37. adapter.SelectCommand.CommandText = sql;
  38. adapter.Fill(ds, sheet);
  39. }
  40. }
  41. else
  42. {
  43. sql = string.Format(sql, sheetName + "{1}quot;);
  44. adapter.SelectCommand.CommandText = sql;
  45. adapter.Fill(ds, sheetName);
  46. }
  47. conn.Close();
  48. }
  49. return ds;
  50. }
  51. }

上面代码中46行的 "quot;" 应为 "$" 

Excel查询的时候,加上范围也可以。这样就能指定范围获得数据。比如: 
(1) string sql = "select * from [{0}A:C]";
(2) string sql = "select * from [{0}A1:C100]";

使用:

  1. private void btnExcel2Data_Click(object sender, EventArgs e)
  2. {
  3. openFileDialog1.Filter = "Excel Files | *.xls";
  4. var ret = openFileDialog1.ShowDialog();
  5. if (ret == System.Windows.Forms.DialogResult.OK)
  6. {
  7. DataSet ds = GetDataSetFromExcel(openFileDialog1.FileName, false);
  8. this.dataGridView1.DataSource = ds.Tables[0];
  9. }
  10. }

[zz]使用OleDb,将Excel导入DataSet的更多相关文章

  1. Excel导入导出帮助类

    /// <summary>    /// Excel导入导出帮助类    /// 记得引入 NPOI    /// 下载地址   http://npoi.codeplex.com/rele ...

  2. C# 导入Excel到DataSet中

    class Import { /// <summary> /// 导入Excel到DataSet中 /// </summary> /// <param name=&quo ...

  3. EXCEL数据导入dataset

    一.开工必备 1.micorosoft office2007 2.VS2010.Oracle 11 二.界面 三.内部代码 (1)获取数据库连接,定义全局变量 private static strin ...

  4. 导入本地Excel到DataSet中

    /// <summary> /// 导入本地Excel到DataSet中 /// </summary> /// <param name="strFileSour ...

  5. (转)高效的将excel导入sqlserver中

    大部分人都知道用oledb来读取数据到dataset,但是读取之后怎么处理dataset就千奇百怪了.很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,System.Data.SqlClie ...

  6. Excel 导入到Datatable 中,再使用常规方法写入数据库

    首先呢?要看你的电脑的office版本,我的是office 2013 .为了使用oledb程序,需要安装一个引擎.名字为AccessDatabaseEngine.exe.这里不过多介绍了哦.它的数据库 ...

  7. C#实现Excel模板导出和从Excel导入数据

    午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.Office.Interop.Excel 3.封装的Exc ...

  8. ASP.NET 将Excel导入数据库

    将Excel导入数据库大致流程:  Excel数据->DataSet->数据库 需要做的准备:1.FileUpload控件一个,按钮一个,如果需要即时显示那么GridView或DataGr ...

  9. 使用OLEDB读取excel和csv文件

    这是我第一次在博客上写东西,简单的为大家分享一个oledb读取文件的功能吧,这两天在做一个文件导入数据库的小demo,就想着导入前先在页面上展示一下,之前调用Microsoft.Office.Inte ...

随机推荐

  1. spring boot基于DRUID数据源密码加密及数据源监控实现

    前言 随着需求和技术的日益革新,spring boot框架是越来越流行,她也越来越多地出现在我们的项目中,当然最主要的原因还是因为spring boot构建项目实在是太爽了,构建方便,开发简单,而且效 ...

  2. python实现收邮件判断模块poplib,email

    一.代码 # 输入邮件地址, 口令和POP3服务器地址: import datetime import email import poplib import email.policy from ema ...

  3. 使用gulp管理sass文件

    前提是npm和ruby已经安装好 1. 新建文件夹myproject,cd进入文件夹 再npm init 初始化 2.npm install gulp --save-dev 为项目添加gulp,并将g ...

  4. (转)NAT与NAT穿越学习总结--ICE过程讲的不错

    转:http://cgs1999.iteye.com/blog/1994072 1.引言网络地址转换(Network Address Translation,简称NAT)是一种在IP分组通过路由器或防 ...

  5. C++之宏定义实现两个数最值

    转自:https://blog.csdn.net/baidu_33725271/article/details/69478782 方法一: 利用三重条件运算符 #include <stdio.h ...

  6. 无法将 Ethernet0 连接到虚拟网络”VMnet0″ 详细信息可以在 vmware.log 文件中找到未能连接虚拟机Ethernet0

    在 vmware“编辑->虚拟网络设置”里面,点“恢复默认”可解决.  

  7. Cuckoo架构

    cuckoo在部署阶段,只在Guest系统里塞了一个agent,这个agent在运行阶段负责与Host端程序进行通信,从Host端接收sample, 整个客户端程序,以及配置文件. 在Host端主要的 ...

  8. 剑指offer第二版面试题6:重建二叉树(JAVA版)

    题目:输入某二叉树的前序遍历和中序遍历的结果,请重新构造出该二叉树.假设输入的前序遍历和中序遍历的结果中不包含重复的数字.例如输入的前序遍历序列为{1,2,4,7,3,5,6,8}和中序遍历为{4,7 ...

  9. UVA 356 - Square Pegs And Round Holes

    题目:在一个2n*2n的网格中间画一个直径为2n-1的圆,问圆内部的格子以及和圆相交的格子个数. 思路:只要考虑1 / 4圆的点就行,用点到原点距离与半径比较,当格子左下方和右上方都在格子里时,格子在 ...

  10. 某个ip段可以访问mysql

    我们先创建一个测试用户LimitIP,只允许192.168段的IP地址访问,具体权限如下所示: mysql> GRANT SELECT ON MyDB.* TO LimitIP@'192.168 ...