从URL中检索数据[Excel VBA]
问题描述:
我已经广泛搜索,但没有找到我要找的内容。我对VBA的知识迄今仅限于操纵数字,所以这对我来说是一个新的领域。从URL中检索数据[Excel VBA]
我试图从下面的URL LINK拉单行数据。一旦做到这一点,我可以分析这些数据的工作,但我们会船到桥头......
这里是Excel VBA至今代码:
Enum READYSTATE
READYSTATE_UNINITIALIZED = 0
READYSTATE_LOADING = 1
READYSTATE_LOADED = 2
READYSTATE_INTERACTIVE = 3
READYSTATE_COMPLETE = 4
End Enum
Sub ImportStackOverflowData()
Dim ie As InternetExplorer
Dim html As HTMLDocument
Set ie = New InternetExplorer
ie.Visible = False
ie.navigate "http://api.rsbuddy.com/grandExchange?a=guidePrice&i=1637"
Do While ie.READYSTATE <> READYSTATE_COMPLETE
DoEvents
Loop
'show text of HTML document returned
Set html = ie.document.body
MsgBox html.DocumentElement.innerHTML
'close down IE and reset status bar
Set ie = Nothing
Application.StatusBar = ""
End Sub
导航到URL后, IE下载窗口打开,并要求我打开或保存.json文件...单击任何东西崩溃代码,并忽略它将代码保留在它下面的READYSTATE循环中。
如何阻止它打开此窗口,而是将信息插入工作簿?
谢谢。
答
绕过那个盒子并不是微不足道的,如果你搜索,有很多关于它的帖子。它变得特别复杂,因为某些版本的IE以不同的方式运行(使用下载功能区而不是对话框)。
要做到这一点,您需要使用Windows API来获取下载窗口的句柄并将其解除。这很快就会变得非常复杂。
然而,有一种更简单的方法;请勿使用Internet Explorer进行简单的请求。使用更轻的东西,我在这里使用MSXML
,但是你可以用WINHTTP
替换它。
Sub ImportStackOverflowData()
Dim request As Object
Set request = CreateObject("MSXML2.XMLHTTP")
With request
.Open "GET", "http://api.rsbuddy.com/grandExchange?a=guidePrice&i=1637", False
.send
MsgBox .responseText
End With
End Sub
从我的理解(这可能是错误的),该网站的内容正在下载,因为从服务器发送标头。这是你无法控制的东西。如果您手动导航到该网站,您是否仍然收到下载提示?只是一个侧面说明,看到你显然有一个IE对象库的引用,你不需要在你的模块的顶部创建'ReadyState'枚举。 –
谢谢,这是我遵循的指南的一部分。将删除它。 另外,这是由于IE无法原生显示.json的问题?我应该切换到另一个浏览器吗? – User9123
嗨,很抱歉,我在与您的编辑同时发表评论。 在chrome或firefox中打开URL会显示一行文字。在IE中打开,它试图保存文件... – User9123