白话Excel函数公式 Office易学宝微视频教程合集(Excel+Word+PPT)
笨办法学VBA(从入门到精通) 高效办公必会的Office实战技巧
财务总监的Excel私房课 网易云课堂-Excel数据透视表应用大全
Excel图表神技
查看: 3847|回复: 19

[课时二] Excel使用sql语句的时候,能够实现跨文件查询吗?

[复制链接]
发表于 2011-6-13 16:59:57 | 显示全部楼层 |阅读模式
今天好童鞋讨论的时候,碰到这样一个问题,想在一个sql语句中查询两个文件表的内容

举个例子 :文件1.xls ,里面有表名为A的表;文件2.xls,里面有表名为B的表

能不能这样实现呢?或者说有什么实现方法呢?

select * from [文件1!A$]
union
select * from  [文件2!B$]

嘿嘿,请老师和童鞋指点。

我把示例文件也传了上来,请大家指点
示例文件.rar (10.09 KB, 下载次数: 21)
回复

使用道具 举报

发表于 2011-6-13 17:08:32 | 显示全部楼层
可以。但需要文件的完整路径

[Excel 8.0;Database=" & ThisWorkbook.FullName & "].[文件名$]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-6-13 17:35:39 | 显示全部楼层

回复 2楼 minjiwei 的帖子

您好,minjiwei,谢谢您的指点,您提供的方法我不太会用,我上传了示例文件(示例文件见楼顶),您能不能再给指点一下。语句写到文件里面就行

[ 本帖最后由 wbzxz 于 2011-6-13 17:46 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2011-6-13 18:55:37 | 显示全部楼层

回复 3楼 wbzxz 的帖子

请查看附件!

示例文件.rar

17.16 KB, 下载次数: 16

回复 支持 反对

使用道具 举报

发表于 2011-6-13 18:57:21 | 显示全部楼层

不好意思,只会用VBA做,这样行吗?如附件。下到硬盘来解压缩再运行

  1. Option Explicit
  2. Sub test()
  3. Dim cnn As Object, sql As String, BT As String, rcd As Object, i As Integer, j As Integer

  4. Application.ScreenUpdating = False
  5. [a1].CurrentRegion.Clear
  6. Set cnn = CreateObject("ADODB.Connection")
  7. Set rcd = CreateObject("ADODB.recordset")
  8. cnn.Open "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.Path & "\文件1.xls"

  9. sql = "Select * From [A$] UNION ALL Select * From [Excel 8.0;Database=" & ThisWorkbook.Path & "\文件2.xls" & "].[B$]"

  10. rcd.Open sql, cnn

  11. For i = 1 To rcd.Fields.Count
  12.       Cells(1, i) = rcd.Fields(i - 1).Name
  13. Next

  14. [A2].CopyFromRecordset rcd

  15. rcd.Close: Set rcd = Nothing
  16. cnn.Close: Set cnn = Nothing
  17. Application.ScreenUpdating = True
  18. MsgBox "Ok"
  19. End Sub
复制代码

[ 本帖最后由 xmyjk 于 2011-6-13 19:10 编辑 ]

示例文件.rar

16.49 KB, 下载次数: 8

回复 支持 反对

使用道具 举报

发表于 2011-6-13 21:45:00 | 显示全部楼层
WB你好认真,今天问你的你就发贴了,我跟着学习一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-6-13 23:05:47 | 显示全部楼层
非常感谢minjiwei与xmyjk二位高手的指点,在你们的帮助下,我把同样的sql语句写入到了ole db中,结果,同样获得了成功。

我用文件1做了ole db连接,文件2没有进行连接,用下面的语句,完成了所需的查询。

select * from [A$]  union   
select * from [Excel 8.0;Database=F:\office\我的问题\sql跨文件查询\示例文件\文件2.xls].[B$]

我正式宣布,Excel使用sql语句的时候,能够实现跨文件查询,嘿嘿。
回复 支持 反对

使用道具 举报

发表于 2011-6-14 18:37:59 | 显示全部楼层
不用这么麻烦

直接类似的操作就可以 了


Select '测试1' ,* from `D:\连接测试\测试1.xls`.`1月$` `1月$` union all
Select '测试1' ,* from `D:\连接测试\测试1.xls`.`2月$` `2月$` union all  
Select '测试2' ,* from `D:\连接测试\测试2.xls`.`1月$` `1月$` union all
Select '测试2' ,* from `D:\连接测试\测试2.xls`.`2月$` `2月$`

[ 本帖最后由 wudixin96 于 2011-6-14 18:39 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-6-14 20:33:33 | 显示全部楼层

回复 8楼 wudixin96 的帖子

无敌主任,请教一下
Select '测试1' ,* from `D:\连接测试\测试1.xls`.`1月$` `1月$` union all
Select '测试1' ,* from `D:\连接测试\测试1.xls`.`2月$` `2月$` union all  
Select '测试2' ,* from `D:\连接测试\测试2.xls`.`1月$` `1月$` union all
Select '测试2' ,* from `D:\连接测试\测试2.xls`.`2月$` `2月$`

你这个语句中,抽象一下,是不是应该是这样
select ‘字段名’ from '文件名绝对路径‘.’表名$' '表名$‘

请问无敌主任,表名好像要重复一下,是不是啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-6-14 21:19:05 | 显示全部楼层
报告无敌主任,是不是直接这样就可以?


select ‘字段名’ from '文件名绝对路径‘.’表名$'
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 入学

本版积分规则

快速回复 返回顶部 返回列表