使用vba从web下载excel文件

时间:2016-09-21 18:40:50

标签: excel vba internet-explorer-9

我有以下代码从网上下载特定文件。网页上有文件的名称,如果你点击它就会得到"你要打开还是保存.......从......?打开/保存/取消。 这就是我到目前为止所做的:

    Dim ie As InternetExplorer
    Dim html As HTMLDocument
    Set ie = New InternetExplorer
    ie.Navigate "http://customerservice.ciena.com/BidRegister/Queue.aspx?REGIONID=3"
Set fe1 = html.getElementById("ctl00_P1_rdgFileList_ctl00_ctl00_btnGetFile")
fe1.click

此时我收到了上面告诉你的弹出消息。如何继续我的代码以避免弹出并直接将文件保存在给定位置?是否有一行代码直接保存文件?

1 个答案:

答案 0 :(得分:2)

根据我的回忆,使用Internet Explorer对象时,您无法绕过其安全提示。

我通过使用serverhttp对象使用post / get请求,将文件作为响应体,然后使用ADODB对象将身体直接保存到预定位置来解决这个问题。

以下是GET请求的示例,该请求应直接从URL下载文件:

set objhttp = new MSXML2.ServerXMLHTTP60
URL = "http://www.princexml.com/samples/catalog/PrinceCatalogue.pdf"
objhttp.Open "GET", URL, False
objhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objhttp.send
If objhttp.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 1
    oStream.Write objhttp.responseBody
    oStream.SaveToFile "filepath and filename.pdf", 2
    oStream.Close
End If

要使这项工作适用于POST请求,您需要更多信息。要尝试查找信息,您需要使用Internet Explorer上的F12开发人员工具:

  • 在您正在下载的页面上打开InternetExplorer
  • 按F12打开开发人员工具
  • 点击“网络”
  • 点击“播放”按钮(“启用网络流量捕获”)
  • 现在下载该文件,您应该会在网络摘要中看到请求该文件的POST。
  • 双击F12工具中的POST行,然后点击“请求正文”,无论是什么金矿,是发送到URL请求文件的东西。如果您能解释并将其部署在您的代码中,那么您已经破解了它。

最后要做的就是在上面的代码中更改两行:

 objhttp.Open "POST", URL, False
 objhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
 objhttp.send (This is where you put the data string i.e. the REQUEST BODY)

抱歉,我不能再指定了,POST请求正文可以有多种格式,所以如果没有看到系统的示例,我就无法继续了。