[zz]使用OleDb,将Excel导入DataSet
本方法,将传入的Excel文件内所有的Sheet内的数据都填充入DataSet中。这是一个简单快捷的方法,不足之处是不适合带有格式复杂的Excel文件。(比如:有合并单元格的)
- public class ExcelUtil
- {
- /// <summary>
- /// 从Excel文件导入DataSet
- /// Excel的连接字符串说明(详细参看 http://www.connectionstrings.com/excel ):
- /// HDR=Yes 表示第一行是表头,没有数据,读取时忽略第一行。设置为 No 时则从第一行读取。
- /// IMEX=1 表示告诉OleDb驱动,所有数据将作为字符串读取(numbers,dates等)
- /// 注意:有时候因为ISAM驱动没有安装,设置HDR和IMEX会出异常。去掉即可。
- /// </summary>
- /// <param name="fileName">Excel文件路径</param>
- /// <param name="firstRowIsHeader">第一行是否是表头</param>
- /// <returns>Excel数据,一个Sheet对应一个DataTable</returns>
- public static DataSet GetDataSetFromExcel(string fileName, string sheetName = "", bool firstRowIsHeader = true)
- {
- if (!System.IO.File.Exists(fileName))
- throw new ArgumentException("file is not exist!");
- var ds = new DataSet();
- var strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties=Excel 8.0;";
- //if (firstRowIsHeader)
- // strConn += "HDR=Yes;";
- strConn = string.Format(strConn, fileName);
- using (var conn = new OleDbConnection(strConn))
- {
- conn.Open();
- DataTable excelSchema = null;
- string sql = "select * from [{0}]";
- var adapter = new OleDbDataAdapter();
- adapter.SelectCommand = conn.CreateCommand();
- if (string.IsNullOrEmpty(sheetName))
- {
- excelSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
- new object[] { null, null, null, "TABLE" });
- foreach (DataRow row in excelSchema.Rows)
- {
- var sheet = row["TABLE_NAME"].ToString();
- sql = string.Format(sql, sheet);
- adapter.SelectCommand.CommandText = sql;
- adapter.Fill(ds, sheet);
- }
- }
- else
- {
- sql = string.Format(sql, sheetName + "{1}quot;);
- adapter.SelectCommand.CommandText = sql;
- adapter.Fill(ds, sheetName);
- }
- conn.Close();
- }
- return ds;
- }
- }
上面代码中46行的 "quot;" 应为 "$"
Excel查询的时候,加上范围也可以。这样就能指定范围获得数据。比如:
(1) string sql = "select * from [{0}A:C]";
(2) string sql = "select * from [{0}A1:C100]";
使用:
- private void btnExcel2Data_Click(object sender, EventArgs e)
- {
- openFileDialog1.Filter = "Excel Files | *.xls";
- var ret = openFileDialog1.ShowDialog();
- if (ret == System.Windows.Forms.DialogResult.OK)
- {
- DataSet ds = GetDataSetFromExcel(openFileDialog1.FileName, false);
- this.dataGridView1.DataSource = ds.Tables[0];
- }
- }
[zz]使用OleDb,将Excel导入DataSet的更多相关文章
- Excel导入导出帮助类
/// <summary> /// Excel导入导出帮助类 /// 记得引入 NPOI /// 下载地址 http://npoi.codeplex.com/rele ...
- C# 导入Excel到DataSet中
class Import { /// <summary> /// 导入Excel到DataSet中 /// </summary> /// <param name=&quo ...
- EXCEL数据导入dataset
一.开工必备 1.micorosoft office2007 2.VS2010.Oracle 11 二.界面 三.内部代码 (1)获取数据库连接,定义全局变量 private static strin ...
- 导入本地Excel到DataSet中
/// <summary> /// 导入本地Excel到DataSet中 /// </summary> /// <param name="strFileSour ...
- (转)高效的将excel导入sqlserver中
大部分人都知道用oledb来读取数据到dataset,但是读取之后怎么处理dataset就千奇百怪了.很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,System.Data.SqlClie ...
- Excel 导入到Datatable 中,再使用常规方法写入数据库
首先呢?要看你的电脑的office版本,我的是office 2013 .为了使用oledb程序,需要安装一个引擎.名字为AccessDatabaseEngine.exe.这里不过多介绍了哦.它的数据库 ...
- C#实现Excel模板导出和从Excel导入数据
午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.Office.Interop.Excel 3.封装的Exc ...
- ASP.NET 将Excel导入数据库
将Excel导入数据库大致流程: Excel数据->DataSet->数据库 需要做的准备:1.FileUpload控件一个,按钮一个,如果需要即时显示那么GridView或DataGr ...
- 使用OLEDB读取excel和csv文件
这是我第一次在博客上写东西,简单的为大家分享一个oledb读取文件的功能吧,这两天在做一个文件导入数据库的小demo,就想着导入前先在页面上展示一下,之前调用Microsoft.Office.Inte ...
随机推荐
- cf期望概率专题
cf1009E:求到第i段期望和的比较困难,但是单独求每段的期望是比较容易的,所以单独对每段求和,然后累计总和 E[i]=1/2*a1+1/4*a2+...+1/2^(i-1)*ai-1+1/2^(i ...
- mongodb副本集的内部机制(借鉴lanceyan.com)
针对mongodb的内部机制提出以下几个引导性的问题: 副本集故障转移,主节点是如何选举的?能否手动干涉下架某一台主节点. 官方说副本集数量最好是奇数,为什么? mongodb副本集是如何同步的?如果 ...
- 使用ansible远程管理集群
使用ansible远程执行命令 1.ansible简介 ansible的官方定义:"Ansible is Simple IT Automation"--简单的自动化IT工具.这个工 ...
- eclipse spring boot 项目出现java.lang.ClassCastException 解决方法
问题 eclipse spring boot 项目出现java.lang.ClassCastException 解决方法: 重新生成项目
- Java学习之集合(Collection接口)
集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储 集合特点: 1.用于存储对象的容器 2.集合长度可变 3.不可以存储基本数据类型 集合体系的顶层C ...
- docker学习日记一(镜像构建-container commit和image build)
构建镜像的方式两种: 一.根据已有的container构建-docker container commit 二.根据已有的image构建-docker image build(推荐) containe ...
- 前端 css 进阶
内容目录: 1.css盒子模型 2.浮动 float 3.溢出 overflow 4.定位 position 5. z-index 6.opacity 1.css盒子模型 margin:用来调节盒子与 ...
- ros机器人导航设置原点,目标点
之前利用movebase导航定位都是通过rviz用鼠标指来指去,实验时非常方便,但实际应用总不能也人工指来指去吧,这怎么体现智能呢 启动导航后,用以前使用的rviz设设置目标点来获取map坐标系下的位 ...
- layui中load具体用法
遮盖窗体,demo: layer.load(,{ // content: "加载中...", shade: [0.4,'#000'], //0.1透明度的白色背景 time:* } ...
- 19. 接口(创建interface 继承implements)
1.语法: interface 接口名{ 属性 抽象方法 } 2.实例: 3.注意: 1)类实现接口可以通过implements实现,实现接口的时候必须把接口中的所有方法实现,一个类可以实现多个接口. ...