簡體   English   中英

Excel - 納斯達克股息歷史記錄(從 Web 獲取外部數據)

[英]Excel - Nasdaq Dividend History (Get External Data from Web)

我想從納斯達克的網站創建一個可刷新的股息歷史查詢,這里是蘋果的 URL ( http://www.nasdaq.com/symbol/aapl/dividend-history )

當我嘗試運行 Excel 的本機“新 Web 查詢”時,股息歷史記錄表似乎不是一個可選選項。 將此信息提取到電子表格中的最佳方法是什么?

如果可能的話,如果可以運行查詢來引用某個單元格中的股票代碼,那也會非常有幫助。

任何意見,將不勝感激。

編輯:我正在專門尋找股息及其宣布日期,只能在納斯達克的網站上找到這些信息。 如果有一種對 excel 更友好的替代方法,那也會有幫助。

試一試 - VBA 網頁抓取不是最優雅的,但所有工具都可以實現目標:

Option Explicit

Sub Test()
    Call PasteNasdaqTickerTableHtmlToSheet(ThisWorkbook.Sheets("Sheet4"), "aapl")
End Sub

Sub PasteNasdaqTickerTableHtmlToSheet(ByRef ws As Worksheet, ByVal strTicker As String)

    Dim strTableData As String
    Dim objDataObject As Object

    strTableData = GetTableHtmlFromUrl("http://www.nasdaq.com/symbol/" & strTicker & "/dividend-history", "quotes_content_left_dividendhistoryGrid")

    Set objDataObject = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

    With objDataObject
        .SetText strTableData
        .PutInClipboard
    End With

    ws.PasteSpecial Format:="Text", link:=False, DisplayAsIcon:=False

End Sub


Function GetTableHtmlFromUrl(ByVal strUrl As String, ByVal strTableId As String) As String

    Dim objHtmlReader As Object
    Dim strDocumentHtml As String
    Dim objHtmlParser As Object
    Dim objHtmlTables As Object
    Dim strTableHtml As String
    Dim intTableCounter As Integer

    On Error GoTo ErrHandler

    'get document html
    Set objHtmlReader = CreateObject("MSXML2.XMLHTTP")
    With objHtmlReader
        .Open "GET", strUrl, False
        .Send
        strDocumentHtml = .ResponseText
    End With
    Set objHtmlReader = Nothing

    'return all html if no id supplied
    If strTableId = "" Then
        GetTableHtmlFromUrl = strDocumentHtml
        Exit Function
    End If

    'now parse html for tables
    Set objHtmlParser = CreateObject("htmlfile")
    objHtmlParser.body.innerHTML = strDocumentHtml
    Set objHtmlTables = objHtmlParser.getElementsByTagName("table")

    'iterate tables and check id against our input
    For intTableCounter = 1 To objHtmlTables.Length
        If objHtmlTables.Item(intTableCounter).getAttribute("id") = strTableId Then
            strTableHtml = objHtmlTables.Item(intTableCounter).outerHTML
            Exit For
        End If
    Next intTableCounter
    Set objHtmlTables = Nothing
    Set objHtmlParser = Nothing

    'return table html
    GetTableHtmlFromUrl = strTableHtml

    Exit Function

ErrHandler:
    Debug.Print Err.Number & " : " & Err.Description
    Set objHtmlReader = Nothing
    GetTableHtmlFromUrl = ""

End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM