【VBA研究】用SQL语句读取EXCEL数据例程

作者:iamlaosong

Excel工作表中的数据,可以直接处理,不过如果想快的话最好读入到数组处理。前面说过读入数组可以循环读取,也可以直接给数组赋值读取。虽然这个方式速度快,但只适合读取连续的列,对于分开的列,这种方法不可行,不过可以用SQL语句读取到记录集中,然后对记录集进行处理,看下面例程:

Sub tt()
    Dim cnn2, rst2, cmd As Object
    Dim sqls, sql1, stName As String

    Set cnn2 = CreateObject("ADODB.Connection")
    Set rst2 = CreateObject("ADODB.Recordset")
    'Set cmd = CreateObject("ADODB.Command")

   datfile = "身份证邮件名址1.xls"                         '文件名称
   datFullName = ThisWorkbook.Path & "\" & datfile
   'cnnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=;Extended properties=Excel 8.0;Data Source=" & datFullName
   cnnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Extended properties=Excel 8.0;Data Source=" & datFullName

   cnn2.Open cnnstr
   Windows(datfile).Activate
   stName = ActiveSheet.Name
   sqls = "SELECT 邮件号,收件人姓名 FROM [" & stName & "$]"
   Debug.Print sqls
   Set rst2 = cnn2.Execute(sqls)
   While Not rst2.EOF
       Debug.Print rst2(0) & rst2(1)
       rst2.movenext
   Wend

End Sub

几点说明:

1、本例程中被读取的数据文件“身份证邮件名址1.xls”是打开的,主要是为了取工作表名称。就读取数据本身而言,并不需要打开Excel文件,如果工作表名称是确定的,就可以不用打开;

2、默认工作表第一行是字段名,SQL语句中就是用这些字段名定位的,如程序中的“邮件号”、“收件人姓名”等。如果没有字段名,连接参数中需要增加HDR=NO;

3、连接参数中的“Extended properties=Excel 8.0;”也可以写成“Extended properties=Excel 5.0;”,其它上午数字都不行,这个是Excel的版本号,对应Excel97,对于Excel 97以上版本都用Excel 8.0 。这个扩展属性和前面的Provider配合使用,不同的版本对应不同的Provider。我的环境是Excel2007版,版本号是12.0,如果直接改成12.0会报错,提示:找不到可安装的ISAM,正确的写法是:

cnnstr = "Provider=Microsoft.Ace.OLEDB.12.0;Extended properties=Excel 12.0;Data Source=" & datFullName

4、还有其他一些参数,如下:

参数HDR的值:

HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES

IMEX ( IMport EXport mode )设置:

IMEX 有三种模式:

  0 is Export mode

  1 is Import mode

  2 is Linked mode (full update capabilities)

  我这里特别要说明的就是 IMEX 参数了,因为不同的模式代表著不同的读写行为:

  当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。

  当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。

  当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。

意义如下:

0 ---输出模式;

1---输入模式;

2----链接模式(完全更新能力)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 21:03:12

【VBA研究】用SQL语句读取EXCEL数据例程的相关文章

如何用SQL语句查询Excel数据?

如何用SQL语句查询Excel数据?Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMOpenDataSource( 'Microsoft.ACE.OLEDB.12.0', 'Data Source="c:\book1.xlsx";User ID=Admin;Password=;Extended properties=Excel 12.0')...[Sheet1$] 复制代码

Openxml入门---Openxm读取Excel数据

Openxml读取Excel数据: 有些问题,如果当Cell 里面是 日期和浮点型的话,对应的Cell.DataType==Null,对应的时间会转换为一个浮点型,对于这块可以通过DateTime.FromOADate(double d)转换为时间. 可是缺点的地方就是,如果Cell.DataType ==NULL, 根本无法确认这个数据到底是 浮点型还是[被转换为了日期的浮点数].查阅了很多国外资料,的确国外博客有一部分都反映了.有关Openxml读取Excel时Cell.DataType==

java的poi技术读取Excel数据到MySQL

这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 :java的jxl技术导入Excel  项目结构: Excel中的测试数据: 数据库结构: 对应的SQL: 1 CREATE TABLE `student_info` ( 2 `id` int(11) NOT NULL AUTO_INCREMENT, 3 `no` varchar(20) DEFAU

SQL中读取Excel 以及 bpc语言

1 --开启导入功能 2 exec sp_configure 'show advanced options',1 3 reconfigure 4 exec sp_configure 'Ad Hoc Distributed Queries',1 5 reconfigure 6 --允许在进程中使用ACE.OLEDB.12 7 EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 8

asp.net读取Excel数据

先通过控件FileUpload获取excel文件路径 protected void btnReadExcelFromFileUpload_Click(object sender, EventArgs e) { if (fupExcel.PostedFile.ContentLength > 0) { //获取全路径 string fullFileName = fupExcel.PostedFile.FileName.ToString(); //获取文件名 string fileName = fup

Sql语句批量更新数据(多表关联)

最近在项目中遇到一个问题,原来设计的功能是不需要一个特定的字段值depid的,但是新的功能需要根据depid来展现,于是出现了这样一个问题,新增加的数据都有正确的depid,而原来的大量的数据就没有depid或者说depid不是想要的,面临要批量更新原来数据depid的问题. 更新涉及到三个表base_cooperativeGroup,base_groupuser,base_user. 列出表结构: 1.base_cooperativeGroup 2.base_groupuser 3.base_

猜想-未做 利用office组件读取excel数据

---未实际使用过 用SQL-Server访问Office的Access和Excel http://blog.sina.com.cn/s/blog_964237ea0101532x.html 2007 Office system 驱动程序:数据连接组件 http://www.microsoft.com/zh-CN/download/details.aspx?id=23734 2007 Office system 驱动程序:数据连接组件 详情 版本:All File Name:AccessData

NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

> 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们解析数据入库的功能实现. 那么,这就涉及到一个问题:我们可以读出excel的表头,但是怎么知道每个表头具体对应数据库里面的字段呢? 博主经过一段时间的思考与构思,想到一法:现在的情况是我们有excel表A,对应数据库表B,但是A与B具体属性字段的映射关系我们不知.那我们是不是可以有一个A到B的映射文件C呢? 我想,说到这,大家就很明了了... 第一步:为每张excel创建一个与

java的poi技术读取Excel数据

这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: java的poi技术读取Excel数据到MySQL 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术 :java的jxl技术导入Excel  下面是本文的项目结构: 项目中所需要的jar文件: 所用的Excel数据(2003-2007,2010都是一