2017-07-30 53 views
1

由於從雅虎財務轉換爲不支持自動下載,我查看了其他資源,www.alphavantage.co似乎符合我的要求。但是,數據不會以excel的形式到達。有沒有人在那裏編程過?我正在使用的測試鏈接是https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=MSFT&apikey=demo&datatype=csv。它在瀏覽器中打開它時將數據下載到一個csv文件中,但沒有數據到達excel。將股票數據從www.alphavantage.co下載到excel

提前許多感謝, 揚

+1

即鏈路爲我工作。 – jamheadart

+0

「到達Excel」是什麼意思?他們似乎承諾可以在Excel中打開的CSV文件。所以,應該到達的是csv文件。 – Variatus

+0

我使用以下代碼來下載: –

回答

2

在VBA中,選擇工具>參考並選擇以下引用:

  • Microsoft腳本控制1.0
  • Microsoft腳本運行時

以下函數將檢索最近的數據(ope N,高,低,關閉,和體積)爲特定符號:

Public Function GetLastCloseData(symbol As String) As Dictionary 
    Dim scriptControl As Object 
    Dim json As Object 
    Dim time_series As Object 
    Dim date_data As Object 
    Dim date_label As String 
    Dim date_offset As Integer 

    Set scriptControl = CreateObject("MSScriptControl.ScriptControl") 
    scriptControl.Language = "JScript" 

    'Retrieve historical price data in JSON format 
    With CreateObject("MSXML2.XMLHTTP") 
     .Open "GET", "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=" & symbol & "&apikey=" & API_KEY, False 
     .send 
     Set json = scriptControl.Eval("(" + .responseText + ")") 
     .abort 
    End With 

    'CallByName returns an error if it cannot find the requested selection. 
    'The code is written to skip over those errors. 
    On Error Resume Next 

    Set time_series = CallByName(json, "Time Series (Daily)", VbGet) 

    'If time series property was found... 
    If Not time_series Is Nothing Then 
     date_offset = 0 
     'Retrieve the most recent closing price by looking for todays date. If it's not found, 
     'iterate through the last week of dates, stopping whenever the most recent is found. 
     While date_data Is Nothing And date_offset < 8 
      date_label = Format(DateAdd("d", -date_offset, Date), "yyyy-mm-dd") 
      Set date_data = CallByName(time_series, date_label, VbGet) 
      date_offset = date_offset + 1 
     Wend 
    End If 

    If Not date_data Is Nothing Then 
     Set GetLastCloseData = New Dictionary 
     With GetLastCloseData 
      .Add "Open", CDbl(CallByName(date_data, "1. open", VbGet)) 
      .Add "High", CDbl(CallByName(date_data, "2. high", VbGet)) 
      .Add "Low", CDbl(CallByName(date_data, "3. low", VbGet)) 
      .Add "Close", CDbl(CallByName(date_data, "4. close", VbGet)) 
      .Add "Volume", CLng(CallByName(date_data, "5. volume", VbGet)) 
     End With 
    End If 

    'set error handling back to normal 
    On Error GoTo 0 

End Function 

下面的Sub演示瞭如何使用結果:

Public Sub GetStockData() 
    Dim daily_data As Dictionary 

    Set daily_data = GetLastCloseData("SPY") 
    Debug.Print daily_data("Open") 
    Debug.Print daily_data("High") 
    Debug.Print daily_data("Low") 
    Debug.Print daily_data("Close") 
    Debug.Print daily_data("Volume") 
End Sub 

輸出:

260 
260.15 
259.57 
259.76 
45033392 
+0

注意:此功能要求您在模塊的開頭定義您的Alphavantage API密鑰,如下所示: 'Private Const API_KEY =「api_key_here」' 或者,您可以手動將API Key添加到URL字符串。 – NYITGUY