【问题标题】:download excel file from web using vba使用vba从网上下载excel文件
【发布时间】:2017-01-30 03:44:59
【问题描述】:

我有以下代码可以从网上下载特定文件。该网页具有文件的名称,如果您单击它,您会得到“您要打开还是保存......从......?打开/保存/取消。 这是我到目前为止所拥有的:

    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

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

【问题讨论】:

    标签: excel vba internet-explorer-9


    【解决方案1】:

    据我回忆,使用 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 打开开发者工具
    • 点击“网络”
    • 点击“播放”按钮(“启用网络流量捕获”)
    • 现在下载文件,您应该会在网络摘要中看到请求该文件的 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 请求正文可以有很多格式,所以没有看到您系统的示例,我不能再进一步了。

    【讨论】:

    • "Put in your file request string here"是文件名还是什么?
    • 抱歉,我无法更具体地举例说明这部分的内容,因为我似乎无法通过您提供的 URL 访问该网站以进行测试。 “文件请求字符串”将是一些键/值对,告诉服务器你在追求什么。我将尝试找到一个示例文件下载,您可以在您的网站上复制以了解其工作原理。
    • 已编辑答案以显示 GET 请求的工作示例,如果您可以使用网络流量监视器(对于 IE,这是 F12 按钮),您将能够看到 POST 请求字符串是什么下载一个文件。尝试效仿。
    • 我明白了,但是当我点击文件时我的网址没有改变。这就是为什么我无法追踪它。在你的例子中你有“src=princexml.com/samples/catalog/PrinceCatalogue.pdf”真的很清楚,我不
    • 如果您的 URL 没有改变,那么我认为它一定是您需要使用的 POST 请求。我将更新我的答案以找到如何使用 POST 请求找到所需的字符串。如果无法访问您的特定站点,我无法真正为您的特定问题创建完整的工作代码:(
    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 2015-12-07
    • 2013-06-17
    • 2014-10-14
    • 2017-05-09
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    相关资源
    最近更新 更多