使用vba从web下载excel文件

使用vba从web下载excel文件,excel,vba,internet-explorer-9,Excel,Vba,Internet Explorer 9,我有以下代码从web下载特定文件。网页上有文件名,如果你点击它,你会得到“你想从……打开或保存……吗?打开/保存/取消”。 这就是我到目前为止所做的: Dim ie As InternetExplorer Dim html As HTMLDocument Set ie = New InternetExplorer ie.Navigate "http://customerservice.ciena.com/BidRegister/Queue.aspx?REGIONI

我有以下代码从web下载特定文件。网页上有文件名,如果你点击它,你会得到“你想从……打开或保存……吗?打开/保存/取消”。 这就是我到目前为止所做的:

    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

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

根据我的记忆,使用Internet Explorer对象时,您不能绕过其安全提示

我在工作中通过serverhttp对象使用post/get请求来解决这个问题,将文件作为responsebody获取,然后使用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打开开发工具
  • 点击“网络”
  • 单击“播放”按钮(“启用网络流量捕获”)
  • 现在下载该文件,您应该会在网络摘要中看到请求该文件的帖子
  • 双击F12工具中的帖子行,然后单击“请求正文”,其中的任何内容都是金矿,即发送到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请求主体可以这样做,而不会看到您的系统的示例。我不能再进一步了。

根据我使用Internet Explorer对象的回忆,您不能绕过它的安全提示

我在工作中通过serverhttp对象使用post/get请求来解决这个问题,将文件作为responsebody获取,然后使用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打开开发工具
  • 点击“网络”
  • 单击“播放”按钮(“启用网络流量捕获”)
  • 现在下载该文件,您应该会在网络摘要中看到请求该文件的帖子
  • 双击F12工具中的帖子行,然后单击“请求正文”,其中的任何内容都是金矿,即发送到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请求主体可以这样做,而不会看到您的系统的示例。我不能再进一步了。

“在这里输入您的文件请求字符串。”“是文件名还是什么?很抱歉,我无法更具体地说明此部分的示例,因为我似乎无法通过您提供的URL访问网站以进行测试。“文件请求字符串”是一些键/值对,它们告诉服务器您在寻找什么。我将尝试找到一个下载示例文件,您可以在您的站点上复制该文件,以了解其工作原理。编辑答案以显示get请求的工作示例,如果您可以使用网络流量监视器(例如,这是F12按钮),您将能够在下载文件时看到请求后的字符串。试着模仿一下。我明白了,但是当我点击文件时,我的url并没有改变。这就是为什么我无法追踪它。在您的示例中,您有“src=”非常清楚,我不知道如果您的URL没有更改,那么我假设它一定是您需要使用的POST请求。我将更新我的答案,以找到如何使用POST请求查找所需字符串。如果没有访问您的特定网站,我就无法为您的特定问题创建一个完全有效的代码:(“在此处输入您的文件请求字符串”是文件名还是什么?很抱歉,我无法更具体地给出此部分的示例,因为我似乎无法通过您提供的URL访问网站以进行测试。“文件请求字符串”可能是一些键/值对,告诉服务器你在寻找什么。我将尝试找到一个下载的示例文件,你可以在你的网站上复制,以获得其工作原理。编辑的答案显示get请求的工作示例,如果你可以使用网络流量监视器(例如,这是F12按钮)下载文件时,您将能够看到POST请求字符串是什么。尝试模拟它。我看到了,但当我单击文件时,我的url不会更改。这就是我无法跟踪它的原因。在您的示例中,您有“src=”非常清楚,我不知道如果您的URL没有更改,那么我假设您必须使用POST请求。我将更新我的答案,以确定如何使用POST请求查找所需字符串。如果无法访问您的特定网站,我无法为您的特定问题创建完全有效的代码:(