ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3837|回复: 2

[讨论] WebQuery封装了的机制

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-8 19:36 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:网页交互
      Web查询可以直接将网页数据导入到Excel中进行处理,特别对于一些表格数据,例如股票等。需要注意的是,现在大多数网站广泛使用了Ajax技术来实现不刷屏更新数据,导致Web查询对这些使用了脚本的网站不起作用。

     要使用Web查询,可以单击菜单“数据”->“导入外部数据”->“新建Web查询”,弹出“新建Web查询”窗口,在“地址”栏中输入网址,例如Yahoo!的股票历史数据:http://finance.cn.yahoo.com/q/hp?s=600177.SS,然后单击“跳至”按钮,将在网页显示网页内容,这时可以看到网页中出现一些黄色方框,在“新建Web查询”窗口的网页内容中单击单击“导入”,网页数据下载成功后,在数据区域任意单元格单击右键,在右键菜单中可以看到“编辑查询”和“刷新数据”两个菜单用来修改查询设置和刷新数据。

     上面介绍了使用菜单创建Web查询的方法,在VBA中可以使用QueryTables集合的Add方法添加Web查询。QueryTables集合属于Worksheet对象,包含指定工作表的所有QueryTable对象。Add方法返回表示一个新的查询的QueryTable对象。语法如下:

expression.Add(Connection, Destination, Sql)
expression 必需。该表达式返回一个 QueryTables 对象。
Connection Variant 类型,必需。查询表的数据源。可为以下情形之一:
一个包含 OLE DB 或 ODBC 连接字符串的字符串。ODBC 连接字符串的形式为“ODBC;<连接字符串>”。
一个 QueryTable 对象,该对象表示查询信息的复制来源,包括连接字符串和 SQL 文本,但不包括 Destination 区域。如果指定 QueryTable 对象,则忽略 Sql 参数。
一个 ADO 或 DAO RecordSet 对象。可从 ADO 或 DAO 记录集中读取数据。Microsoft Excel 将记录集保留到删除该查询表或者 SQL 连接发生更改时为止。不能对查询结果表进行编辑。
一个 Web 查询,是“URL;”形式的字符串,其中“URL;”是必需的,但不进行本地化,字符串的其余部分作为 Web 查询的 URL。
数据查找程序。是“FINDER;<数据查找程序文件路径>”形式的字符串,其中“FINDER;”是必需的,但不进行本地化。字符串的其余部分为数据查找程序文件(*.dqy 或 *.iqy)的路径和名称。使用 Add 方法时将读取该文件;之后,对查询表的 Connection 属性的调用将返回以“ODBC;”或“URL;”开头的字符串,视具体的调用而定。
一个文本文件。是“TEXT;<文本文件路径和名称>”形式的字符串,其中 TEXT 是必需的,但不进行本地化。
Destination Range 类型,必需。查询表目标区域左上角单元格(放置生成的查询表的区域)。目标区域必须在包含 expression 指定的 QueryTables 对象的工作表上。
Sql Variant 类型,可选。在 ODBC 数据源上运行的 SQL 查询字符串。当使用的数据源为 ODBC 数据源时该参数可选(如果不在此处指定该参数,则应该在查询表刷新之前使用查询表的 Sql 属性进行设置)。当将 QueryTable 对象、文本文件、或是 ADO 或 DAO Recordset 对象指定为数据源时不能使用该参数。
从上面的语法你可以看出QueryTable的数据源不只是网页数据还可以包括数据库以及文本文件。
      
      讲了这么多,我附个实例如下:
Sub 查询()
    Range("$D$7").CurrentRegion.ClearContents
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://qingwen.xyz/weboa/result6 ... 1%E7%AE%97%E8%A1%A8" _
        , Destination:=Range("$D$7"))
         .PreserveFormatting = True            '是否下载格式
         .Refresh BackgroundQuery:=False   '同步异步模式
    End With
End Sub
      
     实际中有时要下载的数据量很大5M以上,下载时间达一分多之久,  微软人性化的在自定义状态栏为我们的任务作了提示,如”正在连至WEB“,”正将WEB数据复制到工作表“,包括鼠标不停转圈直至数据下载完毕。微软是估算时间的吗?还是线程机制实时进度条,相关信息VBA能否捕捉,以便自制一个更人性的进度条以替代MS的状态栏提示。
     其实大多数在做WEB  office开发的都深知这点的重要性,对WEB office 来讲宏的安全度已经不重要,脚本语言执行的VBA尽管可以畅通无阻,却要付出丢失微软状态栏等提示信息的代价,签于AJAX方法的拙笨,打开页面机制的载体变化,更多的人选择 office 自带的VBA功能,但微软封装背后让我们无从知道其内在的机制,如果要花旷日持久的时间去揣摩无异慢性自杀。下附我的测试网站:利用WebQuery做的页面不刷新下载,另附 excel 代码见附件:
       http://qingwen.xyz
       UID:luqiwe
       pwd:88888888
       下载数据点”文档目录“

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-8 19:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
忘附件了,补下

VBA.rar

247.71 KB, 下载次数: 112

TA的精华主题

TA的得分主题

发表于 2014-11-8 21:17 | 显示全部楼层
本帖最后由 引子玄 于 2014-11-8 21:46 编辑

QT对象法,功能十分强大!一般人只会一般的导入法,这只占到QT使用法的1/4功能不到。
QT对象法,有直接导入和间接导入之分,有GET型导入和POST型导入之分,有静止导入和动态导入(自动刷新)之分等种种使用方法。

凡是表格型网页,都可以用QT法采集。QT对象法是网抓最实用最便捷、也是最受人们喜爱的采集方法。
轻视QT法的人,一般都是因为他对QT的全部功能的使用掌握十分不了解(只会简单QT的那种而造成的片面误解)。
就如部分网抓的人大讲特讲“抓包工具”,那是因为他对网页运行原理不十分了解造成的,其实网抓根本不需要抓包工具。



您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-28 18:39 , Processed in 0.030108 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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