VBA中使用ADO来处理Excel数据之现状
VBA-使用ADO操作外部数据
VBA-使⽤ADO操作外部数据使⽤ADO连接外部excel数据源补充⼩知识:在不打开⽂件的情况下,抓取数据1)打开数据-现有连接-浏览更多,然后导⼊你要导的数据,就能在不打开该⽂件的条件下,进⾏透视,操作等。
然后就是通过VBA来实现这个⼩功能Sub test1()MsgBox "叫""张三""的那个⼈"'想要输出:叫“张三”的那个⼈,那么需要多加⼀层“”,将⾥⾯的双引号转义End Sub1)⾸先要打开通道 在VBA界⾯中⼯具引⽤,勾选 Microsoft ActiveX Data Objects x.x Library ,借此就可以使⽤ADO通道2)然后⽤代码来实现这个通道Sub test()Dim conn As New ADODB.Connection '定义⼀个通道conn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=D:\data\Edata.xlsx;extended properties=""excel 12.0;HDR=YES"""'通过什么⽅法,连接什么⽂件,是否有表头'conn.Execute("select * from [data$]") '*代表所有的列表明后⾯需要加 $,在这⾥是已经抓取到数据了Range("a1").CopyFromRecordset conn.Execute("select * from [data$]") '前⾯Range("a1").CopyFromRecordset的作⽤是将抓取到的数据放到以“a1”为头的单元格⾥ 'SQL语句都在这个双引号⾥⾯进⾏操作conn.CloseEnd Sub3)SQL语句操作表Sub test()Dim conn As New ADODB.ConnectionDim sql As Stringconn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=D:\data\Edata.xlsx;extended properties=""excel 12.0;HDR=YES"""Range("a2:z100").ClearContents'Range("a1").CopyFromRecordset conn.Execute("select * from [data$] union all select * from [data2$]") '连接两个数据这⾥是上下的合并'Range("a1").CopyFromRecordset conn.Execute("select 姓名,年龄 from [data$] union all select 姓名,年龄 from [data2$]") '如果两个表不⼀样可以⽤共名的'Range("a1").CopyFromRecordset conn.Execute("select 姓名,年龄 from [data$] where 性别='男'") '条件查找在这SQL语句中可以使⽤单引号 '可以使⽤下⾯的⽅法简写sql = "insert into [data$] (姓名,性别,年龄) values ('⽥七','男',33)"'往数据⾥插⼊⼀⾏数据conn.Execute (sql) '执⾏代码conn.CloseEnd Sub常⽤SQL语句:什么数据库都可以⽤此操作查询数据select * from [data$]查询某⼏个字段select姓名,年龄from [data$]带条件的查询select * from [data$] where性别 = "男“合并两个表的数据select * from [data$] union all select * from [data2$]插⼊新纪录insert into [data$] (姓名,性别,年龄) values ('AA','男',33)修改⼀条数据update [data$] set性别=‘男’,年龄=16where姓名=‘张三‘删除⼀条数据delete from [data$] where姓名='张三'使⽤LEFT JOIN …ON… (类似于VLOOKUP)select [data3$].姓名,性别,年龄,⽉薪from [data$] left join [data3$] on [data$].姓名=[data3$].姓名先UNION ALL 再LEFT JOINselect * from (select * from [data$] union all select * from [data2$])a left join [data3$] on a.姓名=[data3$].姓名'将查询结果赋值到数组arr = Application.WorksheetFunction.Transpose(conn.Execute("select * from [data$]").GetRows)left join on⽅法讲解Sub test()Dim conn As New ADODB.ConnectionDim sql As Stringconn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=D:\data\Edata.xlsx;extended properties=""excel 12.0;HDR=YES"""'sql = "select * from [data$] left join [data3$] on [data$].姓名=[data3$].姓名" '在这⾥会出个错误,就是有两个姓名列,错在*上'(select * from [data$]) (left join [data3$] on [data$].姓名=[data3$].姓名) 为⽅便理解上⾯为啥错误,上⾯语句应该这样断'left是以左边的数据为主,也可以使⽤right以右边的数据为主sql = "select [data$].姓名,性别,年龄,⽉薪 from [data$] left join [data3$] on [data$].姓名=[data3$].姓名"Range("a2:z100").ClearContentsRange("a2").CopyFromRecordset conn.Execute(sql)conn.CloseEnd Sub先合并两个表,然后再left joinSub test()Dim conn As New ADODB.ConnectionDim sql As Stringconn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=D:\data\Edata.xlsx;extended properties=""excel 12.0;HDR=YES"""'sql = "(select * from [data$] union all select * from [data2$])a" 意思是两个表连接成的新表名字叫做 asql = "select a.姓名,性别,年龄,⽉薪 from (select * from [data$] union all select * from [data2$])a left join [data3$] on a.姓名=[data3$].姓名" Range("a2:z100").ClearContentsRange("a2").CopyFromRecordset conn.Execute(sql)conn.CloseEnd Sub使⽤ADO连接ACCESS数据库Sub test()Dim conn As New ADODB.ConnectionDim sql As Stringconn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=D:\data\Adata.accdb" '在这⾥就不需要表头了sql = "select * from [客户信息表] where 城市='天津'" ‘查找语句是⼀样的Range("a2:z100").ClearContentsRange("a2").CopyFromRecordset conn.Execute(sql)conn.CloseEnd SubADO⼯具打开的另⼀种⽅式Sub Macro2()Dim cnn As ObjectSet cnn = CreateObject("adodb.connection")cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;imex=1;hdr=no';Data Source=" & ThisWorkbook.Path & "\Book2.xls" [a1].CopyFromRecordset cnn.Execute("[Sheet1$]")cnn.CloseSet cnn = NothingEnd Sub。
VBA中操作数据库的高级技巧
VBA中操作数据库的高级技巧在VBA编程中,操作数据库是非常常见且重要的任务。
无论是访问和读取数据库中的数据,还是对数据库进行修改和更新,掌握一些高级技巧可以提高效率和灵活性。
本文将分享一些VBA中操作数据库的高级技巧,帮助您更好地处理数据库操作任务。
1. 使用ADO对象连接数据库ADO(ActiveX Data Objects)对象是VBA中操作数据库的主要工具之一。
通过使用ADO对象,我们可以连接到数据库,并执行各种操作。
以下是连接数据库的代码示例:```vbaDim conn As ObjectSet conn = CreateObject("ADODB.Connection")conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\Path\To\Database.accdb;"```上述示例演示了如何连接到一个Access数据库。
您可以根据自己使用的数据库类型和连接字符串进行相应的修改。
2. 执行SQL查询语句一旦连接到数据库,您可以使用SQL语句对数据库进行查询。
VBA中的SQL语句与常见的SQL语言非常相似。
以下是一个示例,演示如何执行SQL查询语句并返回结果到一个记录集对象:```vbaDim rs As ObjectSet rs = CreateObject("ADODB.Recordset")rs.Open "SELECT * FROM TableName", connDo Until rs.EOF'处理记录集数据rs.MoveNextLooprs.CloseSet rs = Nothing```在上述示例中,我们使用SELECT语句查询数据库中的所有记录,并将结果存储在一个记录集对象中。
然后,我们可以使用循环来处理每个记录的数据。
VBA利用ADO操作EXCEL表
VBA利用 ADO操作 EXCEL表
Sub OPENSANDEXC() Dim Conn As Object, Rst As Object Dim sql As String, Path As String Dim i As Integer, PathStr As String Set Conn = CreateObject("ADODB.Connection") Set Rst = CreateObject("ADODB.Recordset") Path = "H:\应付账款9月.xlsm" '要操作的工作薄路径 Conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';" 'Office 07版本以上 'Conn.Open "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + Path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';" 'Office 07 版本以下
sql = "select [编 码],[名称#] from [工作表1$]" '如果字段名中包含空格,在SQL语句中要用中括号括起来,如果有小数点(.),要用#号代替并用中括 号括起来
VBA中使用ADO来处理Excel数据之现状
VBA中使用ADO来处理Excel数据之现状VBA中使用ADO来处理Excel数据之现状Excel工作表中的行和列与数据库中的行和列非常相似。
ADO 让我们可以将 Excel 工作簿看做和数据库一样,用ADO的好处是可以不通过OPEN的方式访问工作簿,如此可以绕过不使用宏即关闭工作簿等陷井,也可以建立sql查询语句,快速搜索相关符合要求的记录,但EXCEL毕竟不是关系数据库,当我们努力想把ADO的访问技术发挥到极致的时候,才发现对EXCEL,ADO也有很大的缺陷,而且是目前技术条件下无法解决的,发本文的目的就是想通过大家讨论ADO技术访问工作簿让我们更加清楚ADO对EXCEL的使用现状.ADO 有 Microsoft Jet OLE DB Provider 和 ODBC Drivers两种方式连接到Excel 数据文件。
ODBC 是一种底层的访问技术,因此,ODBC API 可以是客户应用程序能从底层设置和控制数据库,完成一些高级数据库技术无法完成的功能;但不足之处由于ODBC只能用于关系型数据库,使得利用ODBC很难访问对象数据库及其他非关系数据库。
但一些古董级的东东仍得靠它,其他引挚可能走得太快了已经不能支持了.ADO:全名: ACTIVEX DATA OBJECTS,所谓active英语名瞧一瞧就知道是商贸中要注册的东东,何为要注册,得从oledb1.0说起,那时还没网络,网络都没安全度就可了,网格时代访问数据库安全起见,就得先注册一把,通俗的说就是oledb 2.0,无非换了个名Jet,可以说是ODBC的传人,武功更胜一筹,先且就这样定义一把吧。
1. Jet 连接字符串Dim cn as ADODB.ConnectionSet cn = New ADODB.ConnectionWith cn.Provider = "Microsoft.Jet.OLEDB.4.0".ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _"Extended Properties=Excel 8.0;".OpenEnd With①.程序版本要求:必须使用 Jet 4.0 提供程序②.Excel 版本:对于 Excel 95 工作簿(Excel 版本 7.0),应指定Excel 5.0;对于Excel 97、Excel 2000 或Excel 2002 (XP) 工作簿(Excel 版本 8.0、9.0 和 10.0),应指定 Excel 8.0 版本,07及10使用excel 12.0③.列标题:默认为Excel 数据源的第一行包含可用作字段名的列标题,如果认为不需要列标题,可以设置 HDR=No;JET将字段命名为F1、F2 …等。
如何在 Visual Basic 或 VBA 中使用 ADO 来处理 Excel 数据
使用带有 DSN 的连接字符串的 ODBC 提供程序 Dim cn as ADODB.Connection Set cn = New ADODB.Connection With cn .Provider = "MSDASQL" .ConnectionString = "DSN=MyExcelDSN;" .Open End With
如何使用 Microsoft Jet OLE DB Provider
Jet 提供程序只需要两条信息就可以连接到 Excel 数据源:路径(包括文件名),和 Excel 文件版本。 Jet 提供程序使用连接字符串 Dim cn as ADODB.Connection Set cn = New ADODB.Connection With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _ "Extended Properties=Excel 8.0;" .Open End With
如何在 Visual Basic 或 VBA 中使用 ADO 来处理 Excel 数据
Skip Navigation
登录
帮助和支持
自己查找 询问社区 实时帮助
请选择您需要帮助的产品
Windows
Internet Explorer
Office
Surface
Media Player
Skype
Windows Phone
更多信息
简介
Microsoft Excel 工作表中的行和列与数据库中的行和列非常相似。只要用户记住 Microsoft Excel 不是关系型数据库管理系统,并认 识到这一事实所带来的限制,在许多情况下都可以利用 Excel 及其工具来存储和分析数据。 Microsoft ActiveX Data Objects 让我们可以将 Excel 工作簿看做和数据库一样。本文通过以下几节来讨论如何实现这一点: 使用 ADO 连接到 Excel 使用 ADO 检索和编辑 Excel 数据 从 Excel 检索数据源结构(元数据) 注意:本文中的测试是使用 Microsoft Data Access Components (MDAC) 2.5 在装有 Visual Basic 6.0 Service Pack 3 和 Excel 2000 的 Microsoft Windows 2000 上执行的。对用户在使用不同版本的 MDAC、Microsoft Windows、Visual Basic 或 Excel 时可能会观察到的
VBA实现Excel的数据库查询与连接
VBA实现Excel的数据库查询与连接在日常工作中,我们经常会遇到需要查询和连接数据库的情况。
在Excel中,通过使用VBA编程语言,我们可以轻松地实现与数据库的交互,包括数据库的查询与连接。
本文将介绍如何使用VBA实现Excel的数据库查询与连接。
首先,我们需要在Excel中启用Microsoft ActiveX Data Objects库(简称ADO 库)。
ADO库是一个可用于连接和操作各种类型的数据库的COM组件。
我们可以通过以下步骤启用ADO库:1. 打开Excel,并点击工具栏上的“开发工具”选项卡。
2. 在“控件”组中,点击“工具”按钮,然后选择“引用”。
3. 在弹出的对话框中,找到并勾选“Microsoft ActiveX Data Objects x.x库”(其中x.x表示版本号),然后点击“确定”。
现在,我们已经成功启用了ADO库,接下来就是编写VBA代码来实现数据库查询与连接。
首先,我们需要创建一个ADODB.Connection对象来建立与数据库的连接。
下面是一个示例代码,演示了如何连接到一个名为"MyDatabase"的数据库:```vbaDim conn As New ADODB.Connectionconn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\Path\To\MyDatabase.accdb"conn.Open```在上面的代码中,我们首先创建了一个ADODB.Connection对象,并将连接串指定为一个Access数据库文件(.accdb)。
请注意,这个示例使用的是Microsoft ACE OLEDB 12.0驱动程序,如果你使用的是其他类型的数据库,你需要相应地更改连接字符串。
一旦连接建立成功,我们可以执行SQL查询语句来从数据库中检索数据。
在VBA中使用ADO对象处理数据库
在VBA中使用ADO对象处理数据库VBA(Visual Basic for Applications)是一种编程语言,它可以与Microsoft Office应用程序(如Excel、Access、Word等)集成。
通过使用VBA,我们可以自动化执行各种任务,包括处理数据库。
在本文中,我们将探讨如何使用VBA中的ADO(ActiveX Data Objects)对象处理数据库。
ADO是Microsoft提供的一个用于访问数据库的COM 组件。
首先,我们需要了解一些基本的概念和术语。
数据库是一个结构化存储数据的容器,它由表(Table)组成,每个表包含多个记录(Record)。
每个记录由一行表示,每行由多个字段(Field)组成。
字段是记录中的单个数据项。
要处理数据库,我们需要使用SQL(Structured Query Language)语句来执行各种操作,如查询、插入、更新和删除数据。
接下来,我们将讨论如何使用VBA中的ADO对象连接到数据库。
首先,我们需要在VBA编辑器中启用对ADO的引用。
在“工具”菜单下选择“引用”,然后勾选“Microsoft ActiveX Data Objects x.x Library”。
接下来,我们可以通过创建一个ADODB.Connection对象来建立与数据库的连接。
下面是一个示例代码,展示了如何通过ADO对象连接到数据库:```vbaDim conn As ADODB.ConnectionSet conn = New ADODB.Connectionconn.ConnectionString = "Provider=SQLOLEDB;Data Source=数据库服务器名称;Initial Catalog=数据库名称;User ID=用户名;Password=密码"conn.Open```上面的代码使用SQL Server作为数据库服务器,连接字符串中指定了服务器名称、数据库名称、用户名和密码。
VBA与数据库连接和操作技巧
VBA与数据库连接和操作技巧作为一种可视化基础应用程序,VBA(Visual Basic for Applications)广泛用于Microsoft Office套件中的各种应用,如Excel和Access。
VBA可以通过与数据库连接和操作进行数据处理和分析。
本文将介绍VBA与数据库连接和操作的技巧,帮助读者更好地利用VBA处理数据库中的数据。
连接数据库在VBA中连接数据库通常需要使用ADO(ActiveX Data Objects)对象。
ADO是一个用于访问数据库的COM组件,可以连接各种类型的数据库,如Access、SQL Server、Oracle等。
首先,需要添加对Microsoft ActiveX Data Objects Library的引用。
打开VBA编辑器,选择“工具”菜单下的“引用”,然后勾选“Microsoft ActiveXData Objects Library”。
连接Access数据库的示例代码如下:```Dim conn As ADODB.ConnectionSet conn = New ADODB.Connectionconn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\database.accdb"conn.Open```上述代码创建了一个ADODB.Connection对象,并通过ConnectionString 属性指定了连接字符串。
其中的Data Source参数指定了Access数据库文件的路径,可以根据实际情况进行修改。
接下来,通过Open方法打开数据库连接。
操作数据库通过创建数据库连接后,我们可以使用VBA执行各种操作,如查询、插入、更新或删除数据。
查询数据是常见的操作之一。
可以使用ADODB.Recordset对象来存储查询结果。
使用VBA实现Excel中的数据汇总与统计分析
使用VBA实现Excel中的数据汇总与统计分析在处理大量数据时,Excel是一个非常强大的工具。
它提供了许多功能和工具,可帮助我们对数据进行汇总和统计分析。
但是,当数据量较大且多样性较高时,手动进行数据分析可能变得繁琐和耗时。
通过使用VBA(Visual Basic for Applications)编程语言,我们可以快速自动化这个过程,实现数据的高效汇总和统计分析。
第一步,打开Excel并创建一个新的工作簿。
按下“Alt+F11”打开VBA编辑器。
在VBA编辑器中,选择“插入”>“模块”,然后在模块窗口中编写以下代码。
```Sub 数据汇总与统计分析()'定义变量Dim 数据范围 As RangeDim 汇总表 As WorksheetDim 数据表 As WorksheetDim i As Long'设定数据范围Set 数据范围 = Worksheets("Sheet1").Range("A2:C100") '创建汇总表Set 汇总表 = Worksheets.Add汇总表.Name = "汇总表"'设定汇总表的列名With 汇总表.Cells(1, 1) = "名称".Cells(1, 2) = "数量".Cells(1, 3) = "总销售额"End With'循环遍历数据范围For Each 数据表 In 数据范围'根据名称汇总数量With 汇总表'查找名称所在行i = .Columns(1).Find(数据表.Value, LookIn:=xlValues, LookAt:=xlWhole).Row'累加数量.Cells(i, 2) = .Cells(i, 2) + 数据表.Offset(0, 1)'累加销售额.Cells(i, 3) = .Cells(i, 3) + 数据表.Offset(0, 2)End WithNext 数据表'设置汇总表格式With 汇总表'自动调整列宽.Columns.AutoFit'设置标题单元格为粗体.Rows(1).Font.Bold = True'设置数据区域格式为货币.Range("C2:C" & .Cells(.Rows.Count,1).End(xlUp).Row).NumberFormat = "$#,##0.00"End With'弹出消息框MsgBox "数据汇总与统计分析完成!"End Sub```以上的代码是为了在新建的工作簿中,根据数据源范围进行数据的汇总和统计分析。
利用ADO控件实现对EXCEL数据库的管理
利用ADO控件实现对EXCEL数据库的管理摘要:ADO(ActiveX Data Object)控件是一个用于存取数据源的COM组件,它提供了编程语言和统一数据访问方式OLE DB的一个中间层,使用ADO控件可以快速地创建一个到数据库的连接。
本文就根据某水电站外部变形监测项目的实际情况和需求,利用VB中ADO控件实现了对该项目EXCEL监测数据库的管理。
关键词:VB,ADO控件,EXCEL数据库,管理在水电站的外部变形监测中,常常涉及到大量监测数据的管理。
一般利用EXCEL或者ACCESS数据库来实现对这些数据的管理,但在实际操作的过程中,却会遇到诸多难题。
例如,每天的监测数据如何录入数据库。
若采用手工录入,则几百个监测点的数据要在一天之内录入,对工程人员来说难以完成,并且容易出错。
而若是采用专业的软件,则价格较为昂贵,对于小项目而言,难以承受。
为此,本文提出,可以利用VB中的ADO控件实现对EXCEL数据库的管理。
1.ADO控件的介绍VB 数据访问模型经历了DAO(Database Access Object)、RDO(Remote Data Object)到ADO(ActiveX Data Object)三个重要阶段[1]。
数据访问模型通过设置对象属性以及附加到对象的方法,传递VB对数据库的访问请求,再由数据库管理系统处理这些请求,实现对数据库真正的操作。
VB中的ADO对象模型是以OLE DB为基础的最新的数据访问模型,它的特点是结构简单,可访问的数据源丰富,访问的速度快,效率高,是未来数据访问技术的主流。
ADO(ActiveX Data Object)对象模型由三个成员组成,它们分别是:Connection、Command和Recordset。
其中,Connection用来连接数据源,Command是从数据源获取所需数据的命令信息,Recordset是所获取的一组记录组成的记录集[2]。
而为了在VB程序中使用ADO对象,必须先为VB的工程引用ADO对象库,即在工程的“引用”菜单项里选取“Microsoft ActiveX Data Object 2.6 Library”选项。
vba ado语法说明
vba ado语法说明VBA ADO语法说明VBA中的ADO(ActiveX Data Objects)是一种用于处理数据库的对象模型。
ADO提供了一组在VBA中操作数据库的方法和属性,使得读取和写入数据库变得简单而高效。
在使用VBA ADO之前,需要将ADO库引用添加到VBA项目中。
在VBA编辑器中,依次点击“工具”、“引用”,然后勾选“Microsoft ActiveXData Objects x.x Library”并点击“确定”按钮。
使用VBA ADO进行数据库操作需要经过一系列步骤。
首先,需要创建一个Connection对象,用于建立与数据库的连接。
可以使用Connection对象的Open方法来打开连接,并提供连接字符串作为参数。
连接字符串包含了与数据库连接所需的信息,如数据库的位置、用户名和密码等。
连接对象打开后,就可以执行SQL语句或调用存储过程来操作数据库了。
可以使用Command对象来执行SQL语句。
Command对象代表了要在数据库上执行的操作,可以通过给Command对象的CommandText属性赋值来设置要执行的SQL语句。
然后,可以使用Command对象的Execute方法来执行SQL语句。
执行SQL语句后,可以使用Recordset对象来获取查询结果或者操作数据。
Recordset对象是一个记录集,可以包含一组符合特定条件的数据记录。
可以使用Recordset对象的Open方法来打开记录集,并提供SQL语句或存储过程作为参数。
然后,可以使用Recordset对象的MoveFirst、MoveNext等方法来遍历记录集,获取数据。
完成数据库操作后,需要关闭连接和释放对象资源。
可以使用Connection对象的Close方法来关闭连接,使用Set关键字将对象设置为Nothing来释放对象资源。
在使用VBA ADO进行数据库操作时,需要注意一些常见问题。
首先,应该确保数据库驱动程序已正确安装在计算机上。
利用ado读取excel的问题
利用ado读取excel的问题利用ADO操作Excel文件今天花时间研究了一下ADO操作Excel文件的问题,跟大家分享一下:首先利用Excel2003创建了一个名为Demo.xls的文件,内容如下:Name AgeTY12TZL15然后打开VC,创建一个命令行应用程序。
然后如一般的ADO程序一样编写相应代码,只是注意打开数据库的代码如下写:m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0; DataSource=Demo.xls;Extended Properties=/"Excel8.0;HDR=No;IMEX=1/"","","",adModeUnknown);注意一下HDR,如果后面是No的话,表示ADO将不把你Excel 文件的第一行作为字段名(此时使用默认字段名:F1,F2。
以此类推,当然也可以用(LPCTSTR)m_pRecordset->GetFields()->GetItem((_variant_t) zz)->Name之类的代码来获得相应的字段名)。
否则如上Excel文件的字段名将是Name与Age。
另外是IMEX,如果设置了"IMEX=1;" 则通知驱动程序始终将“互混”(数字,日期,字符串等)数据列作为文本读取,同时这个选项有可能影响到excel表格拒绝写操作,也就是说,如果我们要求写入excel的话,这个选项不能被设置。
接下来是打开记录集,代码如下(注意一下表名的写法):m_pRecordset->Open("select * from[Sheet1$]",_variant_t((IDispatch*)m_pConnection,true),adOp enDynamic,adLockOpt imistic,adCmdUnknown);知道了字段名,打开了数据库跟记录集,随后的操作就跟普通ADO的操作一样了:读取操作:while(!m_pRecordset->adoEOF){_variant_t var = m_pRecordset->GetCollect("Name");if(var.vt != VT_NULL)_bstr_t strName = (LPCSTR)_bstr_t(var);var = m_pRecordset->GetCollect("Age");if(var.vt != VT_NULL)_bstr_t strAge = (LPCSTR)_bstr_t(var);string strMid = strName + "--> " + strAge;cout<<strmid.c_str()<<endl;< p="">m_pRecordset->MoveNext();}插入操作:m_pRecordset->AddNew();m_pRecordset->PutCollect("Name",_variant_t("zz"));m_pRecordset->PutCollect("Age",_variant_t("23"));m_pRecordset->Update();更新操作:m_pRecordset->MoveFirst();m_pRecordset->PutCollect("Name",_variant_t("zz"));m_pRecordset->Update();删除操作:不支持!这也是感到很遗憾的地方。
Excel如何运用VBA+ADO...
Excel如何运用VBA+ADO...Q:如下要求:1、将附件里的(7-31.XLS)工作簿(T estData)表中的B:AG列第4行到最后一行(最后一行不定)数据导入到(检验数据库--误差数据)表中,倒入工作簿需手选,如果导入其他工作簿时,数据库里的出厂编号列已有的话,也就是说出现重复编号时,替换整行数据,例如已经导入了一个(7-31.XLS)工作簿(TestData)表中的B:AG列第4行到最后一行数据,其中有编号1207001,而(7-31.XLS)工作簿(TestData)表中的B:AG列第4行到最后一行中的数据也有1207001这个编号时。
直接替换掉1207001后面的整行数据。
无则在数据库插入数据。
2、按照A2-A17单元格查找数据库中的数据并将整行的数据复制到“问题.xls”工作簿“S HEET1"工作表中来3、将“问题.xls”工作簿“SHEET2"工作表中的A2-L3导入到检验数据库中的“基本资料”表A:第一个要求的思路是,先交叉筛选出两表重复的数据,然后从ACC数据库中删除,然后再用插入数据。
第二个要求就是直接查询啦。
第三个要求无非也是直接插入数据。
1.Sub wt1()2.Dim cnn As Object, SQL$, fpth As String3.4.fpth = Application.GetOpenFilename("excel文件,*.xls*", , , , False) '运用打开文件对话框获取打开文件路径5.Set cnn = CreateObject("adodb.connection") '创建ADO连接对象n.Open "provider=microsoft.jet.oledb.4.0;data source=" & ThisWorkbook.Path & "" & "检验数据库.mdb" '设置连接参数7.SQL = "delete from 误差数据 where 出厂编号 in (select 出厂编号from [Excel 8.0;Database=" & fpth & "].[TestData$b3:AG65536])" '从数据库删除重复数据n.Execute SQL '执行SQL语句9.SQL = "insert into 误差数据select * from [Excel 8.0;Database=" & fpth & "].[TestData$b3:AG65536]" '然后插入所有数据n.Execute SQL '执行n.Close12.Set cnn = Nothing13.End Sub14.15.Sub wt2()16.Dim cnn As Object, SQL$17.18.Set cnn = CreateObject("adodb.connection") '创建ADO 连接对象n.Open "provider=microsoft.jet.oledb.4.0;data source=" & ThisWorkbook.Path & "" & "检验数据库.mdb" '设置连接参数20.SQL = "select * from 误差数据 where 出厂编号 in (" & Join(Application.Transpose(Range("a2:a17")), ",") & ")" '做条件查询21.Range("b2").CopyFromRecordset cnn.Execute(SQL) '输出到单元格n.Close23.Set cnn = Nothing24.End Sub25.26.Sub wt3()27.Dim cnn As Object, SQL$, fpth As String28.29.Set cnn = CreateObject("adodb.connection") '创建ADO 连接对象n.Open "provider=microsoft.jet.oledb.4.0;data source=" & ThisWorkbook.Path & "" & "检验数据库.mdb" '设置连接参数31.SQL = "insert into 基本资料select * from [Excel 8.0;Database=" & ThisWorkbook.FullName & "].[Sheet2$b1:l65536]"32.'直接插入数据n.Execute SQL '执行n.Close '关闭连接35.Set cnn = Nothing36.End Sub。
VBA实现Excel的数据关系分析与连接
VBA实现Excel的数据关系分析与连接Excel是一款强大的数据分析工具,通过VBA(Visual Basic for Applications)的编程语言,可以进一步利用Excel进行数据关系分析与连接。
本文将介绍如何使用VBA实现Excel的数据关系分析与连接,包括数据关系的建立、关系查询、数据连接的几个关键步骤。
首先,我们需要在Excel中建立数据表格,并确保每个数据表格都有一个唯一标识符,以实现数据关系的建立。
唯一标识符可以是某个列中的唯一值,例如学号、工号等。
在建立数据表格时,我们需要确保各个表格的字段名称和数据类型的一致性,以实现后续的数据连接与查询。
接下来,我们可以使用VBA编写代码来实现数据关系的建立。
首先,在Excel中按下“ALT+F11”组合键打开VBA编辑器,然后点击菜单栏中的“插入”-“模块”,在弹出的编辑窗口中编写VBA代码。
我们可以使用VBA的函数和语句来实现数据关系的建立和查询。
在VBA中,我们可以使用“ADO(ActiveX Data Object)”对象库来连接Excel数据,进行数据查询与操作。
首先,我们需要使用VBA的“引用”功能添加对“Microsoft ActiveX Data Objects x.x Library”的引用,其中“x.x”表示版本号。
接下来,我们可以使用VBA编写代码来建立Excel数据的连接。
在进行数据连接之前,我们需要确定要连接的数据表格和字段。
我们可以使用VBA的“连接字符串”来连接数据库,其中包含连接数据库的相关信息,如数据源、用户名、密码等。
接下来,我们可以使用VBA的“连接对象”来建立与数据源的连接,并执行SQL语句进行数据查询与操作。
在进行数据查询与操作时,我们可以使用VBA的“记录集”对象来存储查询结果。
记录集是一个类似于数据表格的二维结构,可以暂时存储查询结果以供后续的数据处理。
我们可以使用VBA的“查询语句”来执行SQL查询,并将查询结果存储到记录集中。
VBA中的数据处理与分析技巧
VBA中的数据处理与分析技巧VBA(Visual Basic for Applications)是一种用于编写宏的编程语言,常用于Microsoft Office软件中的自动化任务和数据处理。
它提供了丰富的功能和灵活性,可以帮助用户更高效地处理和分析数据。
在本文中,我们将探讨一些在VBA中进行数据处理和分析的技巧。
一、数据处理技巧1. 读取和写入数据:使用VBA可以轻松地读取和写入Excel中的数据。
通过使用Workbook和Worksheet对象,您可以访问工作簿和工作表,并使用Range对象来处理单元格范围。
例如,您可以使用Cells属性来读取和写入单元格的值,使用Range对象来定位和复制数据。
2. 数据筛选和排序:VBA提供了强大的数据筛选和排序功能,可以帮助您快速准确地找到所需的数据。
您可以使用Autofilter方法来应用筛选条件,并使用Sort方法来对数据进行排序。
此外,您还可以使用AdvancedFilter方法来实现更复杂的数据筛选。
3. 数据清理和转换:在现实世界中,经常需要对数据进行清理和转换,使其适合进一步分析。
利用VBA的字符串处理函数和日期函数,您可以轻松地处理和转换文本和日期数据。
例如,您可以使用Trim函数来去除字符串中的空格,使用Format函数来转换日期的格式。
4. 数据透视表:数据透视表是一种强大的数据分析工具,在VBA中也可以使用。
您可以使用PivotTables对象来创建和修改数据透视表。
通过添加字段、设置数据源和应用分析函数,您可以通过VBA自动化地生成和更新数据透视表。
二、数据分析技巧1. 统计分析:VBA提供了一系列函数和方法,可以帮助您执行常见的统计分析。
例如,您可以使用Count函数计算一列数据中的非空单元格数量,使用Sum函数计算一列数据的总和,使用Average函数计算一列数据的平均值。
此外,您还可以使用Histogram函数绘制直方图,并使用Regression函数进行回归分析。
Excel VBA中ADO记录集使用技巧
Excel VBA中ADO记录集使用技巧技巧1:使用唯一值填充组合框主题使用Recordset(记录集)用表中的唯一值来填充组合框。
问题想创建一个组合框,基于表中(见下图1)的内容创建省份的唯一值列表。
图1:示例工作表解决方法使用简单的记录集快速提取不同的省份名并将其装载到组合框。
Sub FillCombox()Dim Myconnection As ConnectionDim Myrecordset As RecordsetDim MyWorkbook As StringSet Myconnection = New ConnectionSet Myrecordset = New Recordset'识别引用的工作簿MyWorkbook = Application.ThisWorkbook.FullName'打开对工作簿的连接Myconnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _"Data Source=" & MyWorkbook & ";" & _"Extended Properties=Excel 8.0;" & _"Persist Security Info=False"'将所选区域装载到记录集中Myrecordset.Open "Select Distinct [省份] from [Sheet1$A1:D50]", Myconnection, adOpenStaticWith boBox1.ClearDo.AddItem Myrecordset![省份]Myrecordset.MoveNextLoop Until Myrecordset.EOFEnd WithEnd Sub上述代码运行得相当快,并且可以在任何事件中调用它们,例如工作簿打开时、查询刷新后或者按下按钮。
VB中用ADO连接excel2003的方法
VB中用ADO连接excel2003的方法想用VB直接调用显示excel2003中的数据,结果老是不成功,试验了一下午,终于找到一个简单的办法:1.先在窗体中添加一个ADODC控件和MSHFlexGrid控件(DataGrid控件也可以,用来显示数据)。
(当然,这几个控件都要先在部件菜单中添加。
)2.设置ADODC控件的属性:(关键步骤)(1)在ADODC控件上右击,选择ADODC属性-通用-使用连接字符串,点击后面的“生成”。
(2)在弹出的数据链接属性窗口中,提供程序-选中Microsoft Jet 4.0 OLE DB Provider,点击下一步。
(3)连接-选择或输入数据库名称------点后面的3个点的按钮,选择要链接的excel文件。
注意:默认只显示mdb扩展名的文件,选中“所有文件”,就可以看到excel文件了。
(或者直接输入excel文件的路径)先不要点确定,点击“所有”选项卡。
看下一步(4)选中"Extended Properties"这一项,点击下面的“编辑值”按钮,输入“excel 8.0”,确定。
OK,ADODC控件的ConnectionString属性就设置完了(也可以直接在右边的属性窗口中设置,一样的。
)。
现在找到刚才有测试连接的那个页面,点测试连接,显示“测试连接成功”。
我们已经成功一半了。
3.设置ADODC控件的RecordSource属性:命令类型选择1-adCmdText,命令文本输入:“select* from [表1$] ” ,确定。
这一段命令文本是一句SQL查询语句,意思是查询表1中的所有内容。
(你也可以根据需要进行修改。
)至此,ADODC控件的关键属性设置完成。
下面只需要把MSHFlexGrid控件的DataSource属性设置成ADODC1,就可以在MSHFlexGrid控件中显示表1中的数据了。
(具体显示什么数据,由那条SQL语句决定,当然你可以在程序运行时修改。
VBA数据库解决方案第32讲:利用ADO,秒杀实现多个EXCEL工作表的数据的汇总
VBA数据库解决方案第32讲:利用ADO,秒杀实现多个EXCEL工作表的数据的汇总大家好,今日讲解VBA数据库解决方案的第32讲,利用ADO,秒杀实现多个EXCEL工作表的数据的汇总。
我曾经讲过:学以致用,如果我们学习了,没有利用,那么知识永远是知识,无法转换为我们实际的成果。
所以我的资料中无论是《VBA代码解决方案》还是《VBA数据库解决方案》都在力求实用,把学到的知识放在实用之中。
到今天这讲,我们讲了30余讲的数据库相关的知识,大家一定对于连接,打开数据库不陌生了,今日我们给大家讲解利用ADO连接到EXCEL的方法,从而实现多个EXCEL数据汇总到一个文件中的方法。
这讲的作用非常大,可以给很多的数据统计人员打开思路,工作中还望多多利用。
实例:我们有三个EXCEL数据表格,文件是07版本的,记录的是16年到18年的某项数据记录,我们要把这些数据表A列除去第一行的数据汇总到当前的同一个EXCEL表格中,同时把第一行的数据换成16年、17年、18年。
估计大家看到我的这个实例,会联想到很多自己工作中的例子吧,我给出的这个三个源数据的文件及内容如下:16年数据:17年数据:18年数据:我们看到,数据表是不同行数的,要实现我们的目的,如果按照正常的VBA操作,我们要逐个打开这三个文件,然后利用循环语句,把这些数据提取处理,这样的处理当然可以,我们今天要讲的是利用ADO实现我们的目的。
代码如下:Sub mynzexcels_1()'第32讲,利用ADO,秒杀实现多个EXCEL工作表的数据汇总Dim cnADO, rsADO As ObjectDimstrPath, strTable, strSQL As StringSet cnADO = CreateObject("ADODB.Connection")[B1:D400] = ""arr = Array("16年", "17年", "18年")For i = 0 To UBound(arr)strPath = ThisWorkbook.Path & "\" & arr(i) &".xlsx"strTable = "[sheet1$]"'建立连接cnADO.Open"provider=Microsoft.ACE.OLEDB.12.0;extendedproperties='excel 8.0;hdr=no;imex=1';data source=" & strPathstrSQL = "select F1 from " & strTableCells(1, i + 2).CopyFromRecordset cnADO.Execute(strSQL)cnADO.CloseNext iSet cnADO = Nothing[b1:d1] = arrEnd Sub代码截图:代码讲解:1 arr= Array("16年","17年","18年") 建立一个数组用来放三个文件的名字2 Fori = 0 To UBound(arr)strPath = ThisWorkbook.Path & "\" & arr(i) &".xlsx"strTable = "[sheet1$]"'建立连接cnADO.Open"provider=Microsoft.ACE.OLEDB.12.0;extendedproperties='excel 8.0;hdr=no;imex=1';data source=" & strPathstrSQL = "select F1 from " & strTableCells(1, i + 2).CopyFromRecordset cnADO.Execute(strSQL)cnADO.CloseNext i先后建立三次连接,连接到这三个EXCEL文件。
VB中使用ADO的方法创建及访问Excel文件
VB中使用ADO的方法创建及访问Excel文件本文主要介绍使用ADO的方法操作EXCEL文件,其它相对于使用EXCEL对象更通用简单.数据库连接Dim adoConn As New ADODB.ConnectionDim adoReco As New ADODB.RecordsetSet adoConn = New ADODB.Connection'OLE DB + ODBC Driver 方式:'adoConn .Open "driver=Microsoft Excel Driver受能力(*.xls);DBQ=C:/1.xls"'Microsoft.Jet.OLEDB.4.0 方式,(建议)adoConn .Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=C:/1.xls;Extended Properties='Excel 8.0;HDR=Yes'"数据库建立'创建任意名及工作表名的EXCEL文件adoConn .Execute "Create table [C:/1.xls].Sheet1" & "(" & Sql & ")" 如Sql= "Num int, Name char(20)"数据集访问Set adoReco = New ADODB.recordsetadoReco .Open "Select * from [sheet1$]", connExcel, adOpenDynamic, adLockOptimistic数据插入,更新,删除'必须以Microsoft.Jet.OLEDB.4.0 方式连接数据库才支持INSERT,UPDATA!adoConn .Execute "insert into [sheet1$] (....) values (....)"adoConn .Execute "UPDATE [sheet1$] Set ....=... Where ..."adoConn .Execute "delete * from [sheet1$] where ...."数据库关闭adoReco .CloseSet adoReco = NothingadoConn .CloseSet adoConn = Nothing。
VB通过ADO快速读取EXCEL与TXT文件
VB通过ADO快速读取EXCEL与TXT文件该方法读取30*50格的EXCEL数据仅需要1秒钟,比使用CELLS 属性一个个读取快了将近100倍。
但是使用该方法读取程序自动生成的EXCEL文件时会出现如下错误提示:外部表不是预期的格式。
据查是因为程序生成的EXCEL其实同原始的EXCEL文件有所区别(用TXT打开可发现,另属性也有区别)。
解决方法是将EXCEL打开另存为即可。
************************************以下为新建类代码(该类位于工程组中的Read_Files工程)若不用工程组,可在代码中相应修改。
*********************************Option Explicit' ------------------------------------------------------------' Copyright ?001 Mike G --> ' All Rights Reserved,'EMAIL:********************' ------------------------------------------------------------' You are free to use this code within your own applications, ' but you are forbidden from selling or distributing this' source code without prior written consent.' ------------------------------------------------------------'Read Excel File Using ADOPublic Function Read_Excel _(ByVal sFile _As String) As ADODB.RecordsetOn Error GoTo fix_errDim rs As ADODB.RecordsetSet rs = New ADODB.RecordsetDim sconn As Stringrs.CursorLocation = adUseClientrs.CursorType = adOpenKeysetrs.LockType = adLockBatchOptimisticsconn = "DRIVER=Microsoft Excel Driver (*.xls);" & "DBQ=" & sFilers.Open "SELECT * FROM [sheet1$]", sconnSet Read_Excel = rsSet rs = NothingExit Functionfix_err:Debug.Print Err.Description + " " + _Err.Source, vbCritical, "Import"Err.ClearEnd Function'************************************************************** ********************'Read Text files'You can use Extended Properties='text;FMT=Delimited'"'By adding a third argument we can tell ADO that the file doesn't contain headers.'The argument named HDR takes YES or NO .'connOpen "Provider=Microsoft.Jet" _' & ".OLEDB.4.0;Data Source=" & App.Path _' & ";Extended Properties='text;HDR=NO;" _' & "FMT=Delimited'"'You can use Microsoft Text Driver or Microsoft.Jet'************************************************************** ********************Public Function Read_Text_File() As ADODB.RecordsetDim rs As ADODB.RecordsetSet rs = New ADODB.RecordsetDim conn As ADODB.ConnectionSet conn = New ADODB.Connectionconn.Open "DRIVER={Microsoft Text Driver (*.txt; *.csv)};" & _"DBQ=" & App.Path & ";", "", ""rs.Open "select * from [test#txt]", conn, adOpenStatic, _adLockReadOnly, adCmdT extSet Read_Text_File = rsSet rs = NothingSet conn = NothingEnd Function************************************以下为窗体代码*********************************Option Explicit' ------------------------------------------------------------' Copyright ?001 Mike G --> ' All Rights Reserved,'EMAIL:********************' ------------------------------------------------------------' You are free to use this code within your own applications, ' but you are forbidden from selling or distributing this' source code without prior written consent.' ------------------------------------------------------------Private Sub cmdExit_Click()Unload MeEnd SubPrivate Sub cmdReadTXT_Click()Dim obj As Read_Files.CReadFileSet obj = New Read_Files.CReadFileSet dgData.DataSource = obj.Read_Text_FileSet obj = NothingEnd SubPrivate Sub cmdReadXLS_Click()Dim obj As Read_Files.CReadFileSet obj = New Read_Files.CReadFileSet dgData.DataSource = obj.Read_Excel(App.Path & "/" & "test.xls")Set obj = NothingEnd SubPrivate Sub Form_Load()End Sub。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VBA中使用ADO来处理Excel数据之现状Excel工作表中的行和列与数据库中的行和列非常相似。
ADO 让我们可以将 Excel 工作簿看做和数据库一样,用ADO的好处是可以不通过OPEN的方式访问工作簿,如此可以绕过不使用宏即关闭工作簿等陷井,也可以建立sql查询语句,快速搜索相关符合要求的记录,但EXCEL毕竟不是关系数据库,当我们努力想把ADO的访问技术发挥到极致的时候,才发现对EXCEL,ADO也有很大的缺陷,而且是目前技术条件下无法解决的,发本文的目的就是想通过大家讨论ADO技术访问工作簿让我们更加清楚ADO对EXCEL的使用现状.ADO 有 Microsoft Jet OLE DB Provider 和 ODBC Drivers两种方式连接到Excel 数据文件。
ODBC 是一种底层的访问技术,因此,ODBC API 可以是客户应用程序能从底层设置和控制数据库,完成一些高级数据库技术无法完成的功能;但不足之处由于ODBC只能用于关系型数据库,使得利用ODBC很难访问对象数据库及其他非关系数据库。
但一些古董级的东东仍得靠它,其他引挚可能走得太快了已经不能支持了.ADO:全名: ACTIVEX DATA OBJECTS,所谓active英语名瞧一瞧就知道是商贸中要注册的东东,何为要注册,得从oledb1.0说起,那时还没网络,网络都没安全度就可了,网格时代访问数据库安全起见,就得先注册一把,通俗的说就是oledb 2.0,无非换了个名 Jet,可以说是ODBC的传人,武功更胜一筹,先且就这样定义一把吧。
1. Jet 连接字符串Dim cn as ADODB.ConnectionSet cn = New ADODB.ConnectionWith cn.Provider = "Microsoft.Jet.OLEDB.4.0".ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _"Extended Properties=Excel 8.0;".OpenEnd With①.程序版本要求:必须使用 Jet 4.0 提供程序②.Excel 版本:对于 Excel 95 工作簿(Excel 版本 7.0),应指定 Excel 5.0;对于 Excel 97、Excel 2000 或 Excel 2002 (XP) 工作簿(Excel 版本 8.0、9.0 和 10.0),应指定 Excel 8.0 版本,07及10使用excel 12.0③.列标题:默认为 Excel 数据源的第一行包含可用作字段名的列标题,如果认为不需要列标题,可以设置 HDR=No;JET将字段命名为 F1、F2 …等。
表达式也可写成DB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False; Data Source=" & FileName & ";Extended Properties='Excel 8.0;IMEX=1;HDR=no'"2. ODBC 驱动程序的两种表达方式①.不带DSN连接字符串Dim cn as ADODB.ConnectionSet cn = New ADODB.ConnectionWith cn.Provider = "MSDASQL".ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _"DBQ=C:\MyFolder\MyWorkbook.xls; ReadOnly=False;".OpenEnd With②.使用带有 DSN 的连接字符串Dim cn as ADODB.ConnectionSet cn = New ADODB.ConnectionWith cn.Provider = "MSDASQL".ConnectionString = "DSN=MyExcelDSN;".OpenEnd With1.列标题:默认为 Excel 数据源的第一行包含可用作字段名的列标题。
如果不是这种情况,则必须将该设置关闭,否则,第一行数据将会“消失”,而被用作字段名称。
这可通过向连接字符串添加可选的FirstRowHasNames= 设置来完成。
默认情况下FirstRowHasNames=1, 1即为 True。
如果没有列标题,则需要指定 FirstRowHasNames=0,其中 0 即为 False;驱动程序将字段命名为 F1、F2 …等。
由于 ODBC 驱动程序中存在错误,目前指定 FirstRowHasNames 设置不起作用。
换句话说,ODBC始终把指定数据源中的第一行作为字段名。
要扫描的行数:Excel不可能象关系数据库那样为 ADO 提供有关其数据的详细架构信息。
驱动程序是通过扫描几行现有数据猜测各列的数据类型。
默认为8行,可以设置为1-16的整数值,或指定0,扫描所有现有行。
Excel ODBC 驱动程序(MDAC 2.1 和更高版本)始终扫描指定数据源中的前 8 行,以确定各列的数据类型。
使用这两种提供程序时的一些问题1.混用数据类型①.ADO 是以猜测 Excel 工作表或范围中各列的数据类型确定字段数据类型(这不受Excel 单元格格式设置的影响)。
如果同一列中既有数字值,也有文本值,Jet 和 ODBC 将返回占多数的类型的数据,对于占少数的数据类型,则会返回 NULL(空)值。
如果该列中两种类型数据的数量相等,提供程序将优先选择数字型数据,放弃文本型数据。
如果列中包含不同类型的值,可以将数字值存储为文本,在需要时再使用 VAL()等函数还原为数字。
也可以在连接字符串的“扩展属性”中使用“IMEX=1”来启用导入模式。
在 Excel 工作簿受密码保护时,即使在连接设置中提供了正确的密码,也无法访问excel,并出现错误提示: Could not decrypt file.2.数据源的指定①.三种方式• 整张工作表。
•工作表上的命名单元格区域。
•工作表上的未命名单元格区域。
若要指定一张工作表作为记录源,使用该工作表的名称带美元字符,并套方括号,也是用于表示未知数据库对象名的标准约定,例如:strQuery = "SELECT * FROM [Sheet1$]"也可以使用键盘上波形符 (~) 下的斜单引号字符 (`)strQuery = "SELECT * FROM `Sheet1$`"指定工作表时应注意的是:提供程序认为数据表从指定工作表上最左上方的非空单元格开始。
②.若要指定命名的单元格区域作为记录源,只需定义名称。
例如: strQuery = "SELECT * FROM MyRange"指定工作表作为记录源时,提供程序将新记录添加到工作表中现有记录的下面。
指定区域(命名或未命名区域)时,Jet 也将新记录添加到区域中现有记录的下面。
但是,如果对原区域重新执行查询,则得到的记录集不包含新添加到该区域外的记录。
③.指定未命名区域指定未命名的单元格区域作为记录源时,在工作表名的后面加上用标准 Excel 行/列表示法表示的区域,并用方括号将其括起。
例如:strQuery = "SELECT * FROM [Sheet1$A1:B10]"3.使用ADO 方法编辑 Excel 数据。
对应于 Excel 工作表中包含 Excel 公式(以“=”开始)的单元格的记录集字段是只读的,不能对其进行编辑。
Excel 的 ODBC 连接默认是只读的,但可在连接设置中另行指定。
有时,使用 ADO Recordset 对象的 AddNew 和 Update 方法向 Excel 表插入新数据行时,ADO 可能会将数据值插入错误的列。
删除 Excel 数据时,不能1次删除1整条记录,只能通过分别清空各个字段的内容来删除一条记录。
删除包含 Excel 公式的单元格中的值时会出现错误信息: Operation is not allowed in this context. 电子表格中行删除完数据后,记录集空记录仍保留。
使用 ADO 在 Excel 中插入文本数据时,文本值前面会出现单引号,这在后续处理数据时可能会出现问题。
4.从 Excel 检索数据源结构(元数据)使用 ADO 可以检索 Excel 数据源的结构,使用时JET和odbc两种 OLE 都返回很少的有用信息。
使用 ADO的 OpenSchema 方法可检索此元数据,也可以使用更强大的 ADOX来检索元数据。
但由于 Excel 数据源,“表”既可以是工作表也可以是命名区域,而“字段”则是几种有限的一般数据类型之一,所以这一附加的功能没有什么用处。
查询表信息关系数据库提供较多种对象(表、视图、存储过程等),Excel 数据源仅提供相当于表的对象,它由工作表和定义的命名区域组成。
命名区域被视为“表”,而工作表被视为“系统表”。
除“table_type”属性外,检索不到太多有用的表信息。
下列代码常用来检索工作簿中可用表的列表:Set rs = cn.OpenSchema(adSchemaTables)Jet 返回的记录集包含9个字段,但其中只有4个字段有数据:• table_name• table_type(“表”或“系统表”)• date_created• date_modifiedODBC 返回的记录集也包含9个字段,但其中只有3个字段有数据:• table_catalog (该工作簿所在的文件夹)• table_name• table_type5.查询字段信息Excel 数据源中字段数据类型有:• 数字(ADO 数据类型 5,adDouble)•货币(ADO 数据类型 6,adCurrency)•逻辑或布尔值(ADO 数据类型 11,adBoolean)•日期(使用 Jet 时,为 ADO 数据类型 7,adDate;使用 ODBC 时为数据类型 135,adDBTimestamp)•文本(一种 ADO ad...Char 类型,例如,202,adVarChar;200,adVarWChar,或相似类型)①.对于数字列,返回的 numeric_precision 始终为 15(是 Excel 中的最大精度)②.对于文本列,返回的 character_maximum_length 始终为 255(是 Excel 列中文本的最大显示宽度,但不是最大长度)。