【问题标题】:Import Data in Excel from a table created by a script in a WebPage从网页中的脚本创建的表中导入 Excel 中的数据
【发布时间】:2014-01-29 03:39:21
【问题描述】:

我正在尝试创建一个自动连接到网页并在 Excel 中导入表格中的数据的宏。我的问题是 Excel 查询工具无法识别表格,我认为是因为它是由页面中的脚本创建的,所以我不能使用标准方式。 目前,我正在使用这种方法:

  1. 将数据复制到剪贴板
  2. 运行 vba 宏,然后从剪贴板获取数据并将其导入 Excel

但是,我每次要导入 20 多个网页,我想要一个“独立”宏,给定页面的 url,它可以在 excel 中导入数据。

我感兴趣的网页是: http://www.investing.com/indices/us-30-historical-data 我正在使用 excel 2010

谁能帮帮我?

【问题讨论】:

  • “在 excel 中导入表格中的数据” - 您能解释一下表格的上下文吗...您是指包含数据的 HTML 表格吗?
  • 进一步我的评论 - 看着网页我猜你想做网页“抓取”,从网页中提取数据并用它做一些聪明的事情。 Excel Query 不可能为您做到这一点。您想要的是某种中间工具,它可以进行屏幕抓取,将其放入 Excel Query 可以访问的表单中,例如CSV 文件。
  • 我想做的相当于使用宏复制剪贴板中的表格
  • 哪个表?那些网站上的 HTML 表格?我相信我已经掩盖了你的问题。您想进行屏幕抓取 - 可以在 VBA 中执行此操作,但它的重要性不言而喻……使用剪贴板只会使事情复杂化。一旦它在剪贴板 - 然后呢?
  • 我感兴趣的是包含日期和价格的表格。如果我可以将数据放入剪贴板,那么我可以使用我编写的宏从剪贴板导入数据。但是,我感兴趣的只是使用宏将该表中的数据导入到 excel 中,如果我可以跳过剪贴板,那对我来说没问题。

标签: javascript html excel vba import


【解决方案1】:

试试这个

Sub Dow_HistoricalData()

    Dim xmlHttp As Object
    Dim TR_col As Object, TR As Object
    Dim TD_col As Object, TD As Object
    Dim row As Long, col As Long

    Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0")
    xmlHttp.Open "GET", "http://www.investing.com/indices/us-30-historical-data", False
    xmlHttp.setRequestHeader "Content-Type", "text/xml"
    xmlHttp.send

    Dim html As Object
    Set html = CreateObject("htmlfile")
    html.body.innerHTML = xmlHttp.ResponseText

    Dim tbl As Object
    Set tbl = html.getElementById("curr_table")

    row = 1
    col = 1

    Set TR_col = html.getelementsbytagname("TR")
    For Each TR In TR_col
        Set TD_col = TR.getelementsbytagname("TD")
        For Each TD In TD_col
            Cells(row, col) = TD.innerText
            col = col + 1
        Next
        col = 1
        row = row + 1
    Next
End Sub

【讨论】:

    【解决方案2】:

    另一种方法是发出类似的 HTTP 请求

    // source http://tkang.blogspot.co.at/2010/09/sending-http-post-request-with-vba.html
    Dim result As String
    Dim myURL As String
    Dim winHttpReq As Object
    Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
    
    myURL = "http://192.168.10.101:80/your_web_service?parameter=hello¶meter2=hi"
    
    winHttpReq.Open "GET", myURL, False
    winHttpReq.Send
    
    result = winHttpReq.responseText
    

    并解析结果。 不过我自己没试过。

    【讨论】:

    • 感谢您的帮助 Günter,我尝试了您的答案,但出现错误,但是您的想法很好:它类似于 Santos 提出的解决方案,适用于我的问题。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2023-03-08
    • 2016-09-20
    • 2020-08-20
    • 2021-11-23
    • 2013-11-01
    相关资源
    最近更新 更多