【问题标题】:Get data from HTML Table to Excel with VBA使用 VBA 从 HTML Table 获取数据到 Excel
【发布时间】:2020-07-14 11:19:06
【问题描述】:

我正在尝试将 Nasdaq 的历史数据直接导入 excel。我已经成功调用了网站,更改了“FromDate”输入并点击了搜索按钮,但我无法以良好的格式将“历史输出”表格刮到 Excel - 请帮助。

我的 VBA 代码

Sub OMX_data()

    Dim URL As String
    Dim ie As InternetExplorer

    Set ie = New InternetExplorer
    ie.Visible = True

    ie.navigate ("http://www.nasdaqomxnordic.com/indexes/historical_prices?Instrument=DK0060368991")

    Do
        DoEvents
    Loop Until ie.readyState = 4

    ie.document.all("FromDate").Value = "2018-01-01"

    Set search_button = ie.document.getElementsByClassName("doSearch")
    search_button(0).Click

End Sub

我的 HTML

<div id="historicalOutput"><table id="historicalTable" class="tablesorter tablesorter-default" border="0" cellpadding="0" cellspacing="0" role="grid">

【问题讨论】:

  • 当你没有时间反馈他们的解决方案是否适合你@JohnJohn时,为什么有人会为你提出解决方案?

标签: html excel vba datatable


【解决方案1】:

尝试下面的脚本,使用您想要开始的日期从该网页获取表格内容。

Sub FetchTable()
    Const postUrl$ = "http://www.nasdaqomxnordic.com/webproxy/DataFeedProxy.aspx"
    Dim Http As New XMLHTTP60, Html As New HTMLDocument
    Dim sPostData$, dateFrom$, dateupto$, C&, R&

    dateFrom = "2018-01-01"
    dateupto = "2020-04-02"

    sPostData = "xmlquery=%3Cpost%3E%0A%3Cparam+name%3D%22Exchange%22+value%3D%22NMF%22%2F%3E%0A%3Cparam+name%3D%22SubSystem%22+value%3D%22History%22%2F%3E%0A%3Cparam+name%3D%22Action%22+value%3D%22GetDataSeries%22%2F%3E%0A%3Cparam+name%3D%22AppendIntraDay%22+value%3D%22no%22%2F%3E%0A%3Cparam+name%3D%22Instrument%22+value%3D%22DK0060368991%22%2F%3E%0A%3Cparam+name%3D%22FromDate%22+value%3D%22" & dateFrom & "%22%2F%3E%0A%3Cparam+name%3D%22ToDate%22+value%3D%22" & dateupto & "%22%2F%3E%0A%3Cparam+name%3D%22hi__a%22+value%3D%220%2C1%2C2%2C4%2C21%2C8%2C10%2C11%2C12%22%2F%3E%0A%3Cparam+name%3D%22ext_xslt%22+value%3D%22%2FnordicV3%2Fhi_table.xsl%22%2F%3E%0A%3Cparam+name%3D%22ext_xslt_lang%22+value%3D%22en%22%2F%3E%0A%3Cparam+name%3D%22ext_xslt_hiddenattrs%22+value%3D%22%2Cip%2Civ%2C%22%2F%3E%0A%3Cparam+name%3D%22ext_xslt_tableId%22+value%3D%22historicalTable%22%2F%3E%0A%3Cparam+name%3D%22app%22+value%3D%22%2Findexes%2Fhistorical_prices%22%2F%3E%0A%3C%2Fpost%3E"

    With Http
        .Open "POST", postUrl, False
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        .send sPostData
        Html.body.innerHTML = .responseText
    End With

    For Each elem In Html.getElementById("historicalTable").Rows
        For Each trow In elem.Cells
            C = C + 1: Cells(R + 1, C) = trow.innerText
        Next trow
        C = 0: R = R + 1
    Next elem
End Sub

确保在执行上述脚本之前添加以下引用:

Microsoft XML, v6.0
Microsoft HTML Object Library

【讨论】:

    【解决方案2】:

    添加到您提供的代码中,类似这样

    ......search_button(0).Click
    
        Dim d As MSHTML.HTMLDocument
        Set d = ie.document
    
        Dim e As MSHTML.HTMLTable
    
        Set e = d.getElementById("historicalTable")
    

    然后您可以查看此对象 e 的智能感知并获取类似的属性

    e.rows(100).innertext

    e.rows.length

    看一下并从中构建一个循环

    我也改了Loop Until ie.readyState = 4 And Not ie.Busy

    【讨论】:

      猜你喜欢
      • 2013-11-27
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 2021-10-08
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      相关资源
      最近更新 更多