ADO.NET 如何读取 Excel

vb.net ADO快速读取excel 一:写在之前 其实我还在写erlang, vb什么的才和我没关系,要不是为了妹子,才不会看 二:关于vb的看法 感觉vb的资料非常乱,由于时间太久,而且有vb,vb.net的分别,需要花费更多的时间去筛选资料 就比如查找读取excel,查找出大量..2000年多有的资料,简直惨..接口已经变过了.. 三:vb 基本的读取excel方法 Dim xlapp A 阅读详情

ADO.NET 如何读取 Excel 

觉得原作者写得非常详细,操作Excel会经常遇到,故学习收藏了!

经常需要在数据库与Execl之间互导数据。net时代,ADO.NET可以使用使用Microsoft.Jet.OleDb访问访问Excel,网上已经有很多类似的资源,最典型也是最简单的可能如下:(asp.net环境)

Code
// 连接字符串
string xlsPath = Server.MapPath("~/app_data/somefile.xls"); // 绝对物理路径
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Extended Properties=Excel 8.0;" +
"data source=" + xlsPath;
// 查询语句
string sql = "SELECT * FROM [Sheet1$]";

DataSet ds
= new DataSet();
OleDbDataAdapter da
= new OleDbDataAdapter(sql, connStr);
da.Fill(ds);
// 填充DataSet

// 在这里对DataSet中的数据进行操作

// 输出,绑定数据
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
很简单吧?!一切就像操作数据库一样,只是需要注意的是:
1。数据提供程序使用Jet,同时需要指定Extended Properties 关键字设置 Excel 特定的属性,不同版本的Excel对应不同的属性值:

用于 Extended Properties 值的有效 Excel 版本。
对于 Microsoft Excel
8.0 (97)、9.0 (2000) 和 10.0 (2002) 工作簿,请使用 Excel 8.0。

对于 Microsoft Excel
5.0 和 7.0 (95) 工作簿,请使用 Excel 5.0。

对于 Microsoft Excel
4.0 工作簿,请使用 Excel 4.0。

对于 Microsoft Excel
3.0 工作簿,请使用 Excel 3.0。
2。数据源路径使用物理绝对路径(同Access)

3。如何引用表名?


对 Excel 工作簿中表(或范围)的有效引用。
若要引用完全使用的工作表的范围,请指定后面跟有美元符号的工作表名称。例如:

select
* from [Sheet1$]
若要引用工作表上的特定地址范围,请指定后面跟有美元符号和该范围的工作表名称。例如:

select
* from [Sheet1$A1:B10]
若要引用指定的范围,请使用该范围的名称。例如:

select
* from [MyNamedRange]
说明:
可以引用Excel 工作簿中的三种对象:
• 整张工作表:[Sheet1$]  ,Sheet1 就是工作表的名称
• 工作表上的命名单元格区域:[MyNamedRange] (不需要指定工作表,因为整个xls中命名区域只能唯一)
XLS命名方法:选中单元格范围》插入》名称》定义
• 工作表上的未命名单元格区域 :[Sheet1$A1:B10]
(在关系数据库提供的各种对象中(表、视图、存储过程等),Excel 数据源仅提供相当于表的对象,它由指定工作簿中的工作表和定义的命名区域组成。命名区域被视为“表”,而工作表被视为“系统表”)

 

注意:
•必须使用[](方括号),否将报:
FROM 子句语法错误
•必须跟$(美元符号),否则报:
Microsoft Jet 数据库引擎找不到对象'Sheet2'。请确定对象是否存在,并正确地写出它的名称和路径。
•如果工作表名称不对,或者不存在,将报:
'Sheet2$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。
•在 如何在 Visual Basic 或 VBA 中使用 ADO 来处理 Excel 数据   中提到可以使用
~  和 '(波浪线和单引号)代替[],使用ADO。NET测试没有成功,报:
FROM 子句语法错误
•当引用工作表明名([Sheet1$])时,数据提供程序认为数据表从指定工作表上最左上方的非空单元格开始。比如,工作表从第 3 行,C 列开始,第3行,C列之前以及第1、2行全为空,则只会显示从第3行,C列开始的数据;以最后表最大范围内的非空单元结束;
•因此,如需要精确读取范围,应该使用命名区域 [NamedRange],或者指定地址:[Sheet1$A1:C10]

 

4。如何引用列名?
•根据默认连接字符串中,数据提供程序会将有效区域内的第一行作为列名,如果此行某单元格为空则用F1、F2表示,其中序数,跟单元格的位置一致,从1开始;
•如果希望第一行作为数据显示,而非列名,可以在连接串的 Extended Properties 属性指定:HDR=NO
默认值为:HDR=NO (应该为 HDR=YES,即默认将第一行作为列名,竟然一直没有发现这个错误,汗upadted 2007年8月18日)格式如下:

Code
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Extended Properties=\"Excel 8.0;HDR=NO\";" +
"data source=" + xlsPath;
注意: Excel 8.0;HDR=NO  需要使用双引号(这里的反斜扛,是C#中的转义)

 

5。为什么有效单元格数据不显示出来?
出现这种情况的可能原因是,默认连接中,数据提供程序根据前面单元格推断后续单元个的数据类型。
可以通过 Extended Properties 中指定 IMEX=1


“IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取


应用程序经常需要与Excel进行数据交互,在上一篇文章ADO.NET 如何读取 Excel (上)阐 述了基于ADO.NET 读取Excel的基本方法与技巧。今天这里要介绍是如何动态的读取Excel数据,这里的动态指的是事先不知道Excel文件的是什么样的结构,或者无法 预测,比如一张.xls文件有多少张sheet,而且每张sheet的结构可能都不一样等等。
其实我们可以通过获取Excel的“架构信息”来动 态的构造查询语句。这里的“架构信息”与数据库领域的“数据库架构信息”意义相同(也称“元数据”),对于整个数据库,这些“元数据”通常包括数据库或可 通过数据库中的数据源、表和视图得到的目录以及所存在的约束等;而对于数据库中的表,架构信息包括主键、列和自动编号字段等。
在ADO.NET 如何读取 Excel (上)提到


在关系数据库提供的各种对象中(表、视图、存储过程等),Excel 数据源仅提供相当于表的对象,它由指定工作簿中的
工作表和定义的命名区域组成。命名区域被视为“表”,而工作表被视为“系统表”)
这里我们将Excel也当作一个“数据库”来对待,然后利用OleDbConnection.GetOleDbSchemaTable 方法
要获取所需的架构信息,该方法获取的架构信息与ANSI SQl-92是兼容的:


注意:对于那些不熟悉 OLE DB 架构行集的人而言,它们基本上是由 ANSI SQL-92 定义的数据库构造的标准化架构。
每个架构行集具有为指定构造提供定义元数据的一组列(称作 .NET 文档中的“限制列”)。这样,如果请求架构信息
(例如,列的架构信息或排序规则的架构信息),则您会明确知道可以得到哪种类型的数据。如果希望了解更多信息,
请访问 Appendix B:Schema Rowsets。
以下是读取Excel文件内“表”定义元数据,并显示出来的的程序片断:

// 读取Excel数据,填充DataSet
// 连接字符串
string xlsPath = Server.MapPath("~/app_data/somefile.xls");
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取
"data source=" + xlsPath;
string sql_F = "SELECT * FROM [{0}]";

OleDbConnection conn
= null;
OleDbDataAdapter da
= null;
DataTable tblSchema
= null;
IList
<string> tblNames = null;

// 初始化连接,并打开
conn = new OleDbConnection(connStr);
conn.Open();

// 获取数据源的表定义元数据
//tblSchema = conn.GetSchema("Tables");
tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

GridView1.DataSource
= tblSchema;
GridView1.DataBind();

// 关闭连接
conn.Close();
接着是一段利用“架构信息”动态读取Excel内部定义的表单或者命名区域的程序片断:


xcel数据,填充DataSet
// 连接字符串
string xlsPath = Server.MapPath("~/app_data/somefile.xls");
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取
"data source=" + xlsPath;
string sql_F = "SELECT * FROM [{0}]";

OleDbConnection conn
= null;
OleDbDataAdapter da
= null;
DataTable tblSchema
= null;
IList
<string> tblNames = null;

// 初始化连接,并打开
conn = new OleDbConnection(connStr);
conn.Open();

// 获取数据源的表定义元数据
//tblSchema = conn.GetSchema("Tables");
tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

//GridView1.DataSource = tblSchema;
//GridView1.DataBind();

// 关闭连接
//conn.Close();

tblNames
= new List<string>();
foreach (DataRow row in tblSchema.Rows) {
tblNames.Add((
string)row["TABLE_NAME"]); // 读取表名
}

// 初始化适配器
da = new OleDbDataAdapter();
// 准备数据,导入DataSet
DataSet ds = new DataSet();

foreach (string tblName in tblNames) {
da.SelectCommand
= new OleDbCommand(String.Format(sql_F, tblName), conn);
try {
da.Fill(ds, tblName);
}
catch {
// 关闭连接
if (conn.State == ConnectionState.Open) {
conn.Close();
}
throw;
}
}

// 关闭连接
if (conn.State == ConnectionState.Open) {
conn.Close();
}

// 对导入DataSet的每张sheet进行处理
// 这里仅做显示
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();

GridView2.DataSource
= ds.Tables[1];
GridView2.DataBind();

// more codes
// .
这里我们就不需要对SELEC 语句进行“硬编码”,可以根据需要动态的构造FROM 字句的“表名”。

不仅可以,获取表明,还可以获取每张表内的字段名、字段类型等信息:

tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, null, null });

在ADO.nET 1.x 时候只有OleDb提供了GetOleDbSchemaTable 方法,而SqlClient或者OrcaleClient没有对应的方法,因为对应数据库已经提供了类似功能的存储过程或者系统表供应用程序访问,比如对 于Sql Server:


SELECT *
FROM Northwind.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME
= N'Customers'
而在ADO.NET 2.0中每个xxxConnenction都实现了基类 System.Data.Common.DbConnection的 GetSchemal 方法
来获取数据源的架构信息
。

使用C#实现ADO.NET读取Excel的代码 首先,我们将使用ADO.NET来读取Excel文件。ADO.NET是一种用于访问各种数据源的技术,包括Excel。中的表格和行,读取每一行的数据。在这个示例中,我们假设Excel文件中的表格具有两列,名称分别为"Column1"和"Column2"。以上是使用C#和ADO.NET读取Excel文件的示例代码。在上面的代码中,我们首先建立了一个连接到Excel文件的连接字符串。替换为你的实际Excel文件的路径。是一个内存中的数据容器,它可以包含多个表格。然后,我们构建一个查询字符串,使用。 阅读详情

相关推荐

用ADO.NET操作Excel数据

用ADO.NET访问及操作Excel数据的教程,附实例及源码

ADO.NET 从DataTable中获取某列含有的不同值的几种方式

private int getCount() { DataTable dt //已知的datadable ,有上万条记录 DataTable newDt=dt.DefaultView.ToTable(true, "city"); int num=newDt.Rows.Count; return num; } DataTable Sourc...

weixin_34318326的博客 467

LMI线性矩阵不等式之非线性变量处理

​ 如果一个LMI线性矩阵不等式中的某项存在两个矩阵变量相乘,那么称该类情形为非线性矩阵不等式,而要直接求解时很困难的,而且LMI工具箱也无法求解非线性矩阵,所以需要通过变量替换法进行处理。 ​...

Mr.邹的博客 4550

用ado.net取数据库中table、column的信息

1.获取数据库中所有的表 object[] objArrRestrict;objArrRestrict = new object[] {null, null, null, "TABLE"};DataTable schemaTbl = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,objArrRestrict);con是oledbConnetio...

weixin_33697898的博客 486

c#源码,将矩阵(二维数组)渲染成云图,强度图,热力图,均匀性图,伪彩图

优快云软件0积分下载链接:https://download.csdn.net/download/wanghuannihao1992/86656759。6、渲染效果良好,颜色均匀分布,不存在等高线,交叉点。3、纯粹的C#代码编写,不含第三方dll或者控件。4、支持ColorBar显示,强度值颜色坐标显示。2、渲染时间60ms左右,速度快,1、二维数据最小支持2*2,7、采样全新数据插值算法。先直接上C#软件效果图。5、整图保存为单个图片。

业余程序员小徐的博客 6883

八戒留档之宝塔部署edusoho

1.安装好基础的服务 2.上传你下载的代码到www/wwwroot文件3、配置网站 4.编辑创建的网站修改nginx文件 NGINX配置如下 server { listen 80; server_name 你的域名; root /www/wwwroot/项目文件名称/web/; location / { try_files $uri /app_dev.php$is_args$args; } ...

wolf23151269的博客 2541

ADO.NET中取得数据库字段的数据类型

ADO.NET中的数据类型 dim columnTypes(205) columnTypes(0) = "Empty" columnTypes(2) = "SmallInt" columnTypes(3) = "Integer" columnTypes(4) = "Real" columnTypes(5) = "Double" columnTypes(6) = "Currency&qu

weixin_34223655的博客 292

【考研复试】西安电子科技大学上机题

【考研复试】西安电子科技大学上机题

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 1740

ADO获取表的所有字段名

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //获取所有字段名 BOOLGetFields(CACCADO&ado) { CStringsql=_T("SELECTTOP1*FROMtableName"); ado.OpenRecordset(sql);...

weixin_33923762的博客 1580

【华为OD机试真题 Python语言】371、增强的strstr | 机试真题+思路参考+代码解析(E卷复用)

>C语言有一个库函数: char *strstr(const char *haystack,const char *needle) ,实现在字符串haystack中查找第一 次出现字符串needle的位置,如果未找到则返回null >  现要求实现一个strstr的增强函数,可以使用带可选段的字符串来模糊查询,与strstr一样返回首次查找到的字符串位置 >  可选段使用"[]"标识,表示该位置是可选段中任意一个字符即可满足匹配条件,比如"a[bc]"表示可以匹配"ab"或"ac" >&

KJ.JK 2606

深入解析:使用Python进行T矩阵散射计算的完整指南

在物理学和工程学中,散射是一个至关重要的概念。当波(无论是光波、声波还是其他类型的波)遇到一个障碍物时,它会在多个方向上散开。为了理解和预测这种行为,我们需要进行数学建模和计算。其中,T矩阵方法是一种非常有效的工具。在开始计算之前,我们需要定义一些基础函数。"""计算T矩阵的一个元素。参数:- wave_vector: 波矢- scatterer_position: 散射体的位置- scatterer_properties: 散射体的性质(如大小、形状等)返回:- T矩阵的一个元素。

qq_38334677的博客 1054

ADO.NET 如何读取 Excel (下)

 应用程序经常需要与Excel进行数据交互,在上一篇文章ADO.NET 如何读取 Excel (上)阐述了基于ADO.NET 读取Excel的基本方法与技巧。今天这里要介绍是如何动态的读取Excel数据,这里的动态指的是事先不知道Excel文件的是什么样的结构,或者无法预测,比如一张.xls文件有多少张sheet,而且每张sheet的结构可能都不一样等等。其实我们可以通过获取Excel的“架构

1809

MATLAB应用实战系列(四十三)-基于MATLAB的光伏并网系统仿真设计

在Matlab中建立光伏电站接入系统模型,包括光伏发电逆变器及负荷模型等,仿真分析接入点处的电能质量,实现高品质并网运行。 壹 构建太阳能电池模型。 初始化参数如下图所示。 贰 构建MPPT控制模型。 具体封装如下所示: 通过PWM算法实现DC-DC稳步输出最大点。 叁 三、构建直流短距离输电线路。 仿真模型如下图: 通过电容来均衡线路电压,使得线路电压保持可靠性。 肆 通过逆变器变换,使得直流线路转换成...

wenyusuran的专栏 3169

ADO.NET 讀取EXCEL

转自晓风残月)经常需要在数据库与Execl之间互导数据。net时代,ADO.NET可以使用使用Microsoft.Jet.OleDb访问访问Excel,网上已经有很多类似的资源,最典型也是最简单的可能如下:(asp.net环境)// 连接字符串                    string xlsPath = Server.MapPath("~/app_data/somefile.xls")

szg3827的专栏 464

【LabVIEW面向对象编程01】简介

记得刚接触labview那会儿,领导让我在测试设备上写一个简单的日志记录程序,自己反反复复查阅资料才简单的写了一个实在是撇脚的程序,后来领导趁着工作之余给我大致讲解了几个函数的用法,然后简单的改了一下,程序就像突然有了灵魂一样,简单好用,从那时起就对labview产生了兴趣,一发不可收拾,那时经常一个人熬夜学习,现在已然没有那种动力了,哎,年轻就是好。接下来我们为学生类创建一个对象,新建一个VI,打开程序框图,直接将我们项目中的类拖到程序框图,它就成为一个实实在在的对象,我们将其命名为studentA。

weixin_43476034的博客 671

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Ado.Net读取Excel常见问题总结

 经常需要在数据库与Execl之间互导数据。net时代,ADO.NET可以使用使用Microsoft.Jet.OleDb访问访问Excel,网上已经有很多类似的资源,最典型也是最简单的可能如下:(asp.net环境) // 连接字符串                    string xlsPath = Server.MapPath("~/app_data/somefile.xls"

夏风鱼的专栏 894

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

excel读写技术-:ADO.NET 如何读取 Excel

转自 晓风残月 http://www.cnblogs.com/Jinglecat/archive/2007/07/23/477472.html 经常需要在数据库与Execl之间互导数据。net时代,ADO.NET可以使用使用Microsoft.Jet.OleDb访问访问Excel,网上已经有很多类似的资源,最典型也是最简单的可能如下:(asp.net环境) //连接字符串...

weixin_30521649的博客 243

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ado.net 如何读取 excel

原文地址:http://tieba.baidu.com/f?kz=331569890 经常需要在数据库与Execl之间互导数据。net时代,ADO.NET可以使用使用Microsoft.Jet.OleDb访问访问Excel,网上已经有很多类似的资源,最典型也是最简单的可能如下:(asp.net环境)   // 连接字符串                      string xlsPath

去日留痕 1840

C#使用Ado.net读取Excel表的代码

工作之余,把做工程过程中重要的代码段做个记录,如下的资料是关于C#使用Ado.net读取Excel表的代码,应该能对各位有所帮助。 using System; using System.Data.OleDb; namespace ConsoleApplication1 { class Program { static void Main() { string c...

weixin_33830216的博客 480

ADO.NET 读取EXCEL

(转)经常需要在数据库与Execl之间互导数据。net时代,ADO.NET可以使用使用Microsoft.Jet.OleDb访问访问Excel,网上已经有很多类似的资源,最典型也是最简单的可能如下:(asp.net环境) 1//连接字符串 2stringxlsPath=Server.MapPath("~/app_data/somef...

aamn98463的博客 267

ado.net如何读取excel(1)

http://www.gzu521.com/campus/article/program/200706/152721.htm 经常需要在数据库与execl之间互导数据。net时代,ado.net可以使用使用microsoft.jet.oledb访问访问excel,网上已经有很多类似的资源,最典型也是最简单的可能如下:(asp.net环境)   // 连接字符串               

jackyxu_2008的专栏 834
下一篇: 四行C#代码实现状态栏中加载进度条
chenep
博客等级 码龄16年 8粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值