excel vba http请求从雅虎财务下载数据
我正在制作一个使用excel vba编写程序的过程。
该程序从asx下载股市数据。
我想从2个url获取数据:
我的代码
url2 = "http://ichart.finance.yahoo.com/table.txt?s=bhp.ax" Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") XMLHTTP.Open "GET", url2, False XMLHTTP.send result = XMLHTTP.responseText ActiveCell.Value = result Set XMLHTTP = Nothing URL 1. http://ichart.finance.yahoo.com/table.txt?s=bhp.ax
我的问题。
这个文件非常大。 我以为我可以简单地存储这些HTTP请求的结果,并打印到debugging窗口或直接到一个单元格。 然而,这些方法似乎切断了部分数据?
如果我从记事本+ +的url2下载txt文件它有近200 000个字符,但它擅长它有3-5 000.处理这些请求,以便所有的数据被捕获,我可以parsing所有这些最好的方法是什么后来?
来自第一个URL的URL 2.我只想要从YQL查询得到的JSON数据。
我的问题
我不知道如何获取JSON数据,当你按照下面的链接,或如何存储它,使URL 1(缺less数据)遇到的问题不会发生。
http://developer.yahoo.com/yql/console/?q=select%20symbol%2C%20ChangeRealtime%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22YHOO%22%2C%22AAPL %22%2C%22GOOG%22%2C%22MSFT%22%29%20 |%20sort%28field%3D%22ChangeRealtime%22%2C%20descending%3D%22true%22%29%0A%09%09&ENV = HTTP% 3A%2F%2Fdatatables.org%2Falltables.env#h = select%20 *%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22bhp.ax%22%29
非常感谢,乔希。
试试这个修订的代码
Sub GetYahooFinanceTable() Dim sURL As String, sResult As String Dim oResult As Variant, oData As Variant, R As Long, C As Long sURL = "http://ichart.finance.yahoo.com/table.txt?s=bhp.ax" Debug.Print "URL: " & sURL sResult = GetHTTPResult(sURL) oResult = Split(sResult, vbLf) Debug.Print "Lines of result: " & UBound(oResult) For R = 0 To UBound(oResult) oData = Split(oResult(R), ",") For C = 0 To UBound(oData) ActiveSheet.Cells(R + 1, C + 1) = oData(C) Next Next Set oResult = Nothing End Sub Function GetHTTPResult(sURL As String) As String Dim XMLHTTP As Variant, sResult As String Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") XMLHTTP.Open "GET", sURL, False XMLHTTP.Send Debug.Print "Status: " & XMLHTTP.Status & " - " & XMLHTTP.StatusText sResult = XMLHTTP.ResponseText Debug.Print "Length of response: " & Len(sResult) Set XMLHTTP = Nothing GetHTTPResult = sResult End Function
这将把数据拆分成行,所以单元格中的最大文本长度不会达到。 这也进一步用逗号分隔数据到相应的列。
您可能想尝试以下代码: http://investexcel.net/importing-historical-stock-prices-from-yahoo-into-excel/
我只是修改qurlvariables到您的url,它的工作,它倒4087行数据到我的Excel表格,很好地格式化没有任何问题。 只需将您的sheet1命名为Data。
Sub GetData() Dim DataSheet As Worksheet Dim EndDate As Date Dim StartDate As Date Dim Symbol As String Dim qurl As String Dim nQuery As Name Dim LastRow As Integer Application.ScreenUpdating = False Application.DisplayAlerts = False Application.Calculation = xlCalculationManual Sheets("Data").Cells.Clear Set DataSheet = ActiveSheet ' StartDate = DataSheet.Range("startDate").Value ' EndDate = DataSheet.Range("endDate").Value ' Symbol = DataSheet.Range("ticker").Value ' Sheets("Data").Range("a1").CurrentRegion.ClearContents ' qurl = "http://ichart.finance.yahoo.com/table.csv?s=" & Symbol ' qurl = qurl & "&a=" & Month(StartDate) - 1 & "&b=" & Day(StartDate) & _ ' "&c=" & Year(StartDate) & "&d=" & Month(EndDate) - 1 & "&e=" & _ ' Day(EndDate) & "&f=" & Year(EndDate) & "&g=" & Sheets("Data").Range("a1") & "&q=q&y=0&z=" & _ ' Symbol & "&x=.csv" qurl = "http://ichart.finance.yahoo.com/table.txt?s=bhp.ax" Debug.Print qurl QueryQuote: With Sheets("Data").QueryTables.Add(Connection:="URL;" & qurl, Destination:=Sheets("Data").Range("a1")) .BackgroundQuery = True .TablesOnlyFromHTML = False .Refresh BackgroundQuery:=False .SaveData = True End With Sheets("Data").Range("a1").CurrentRegion.TextToColumns Destination:=Sheets("Data").Range("a1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=True, Space:=False, other:=False Sheets("Data").Columns("A:G").ColumnWidth = 12 LastRow = Sheets("Data").UsedRange.Row - 2 + Sheets("Data").UsedRange.Rows.Count Sheets("Data").Sort.SortFields.Add Key:=Range("A2"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With Sheets("Data").Sort .SetRange Range("A1:G" & LastRow) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply .SortFields.Clear End With End Sub
(以上不是我的代码,它是从上面发布在investexcel.net链接上的excel文件中获取的)
- Pythonpandas – 通过匹配主标识符将多个dataframe中的数据添加到同一行,如果没有来自该数据框的结果,则保留空白
- 尝试读取Excel文件中的值时,在C#中找不到方法GetCellValue
- SharePoint 2010中的Excel查看器不加载工作簿
- search特定文本的代码,然后删除它,并用另一个词replace它
- 我怎样才能改变我的数据透视表,以便以所需的方式显示数据?
- 将单元格1的部分与单元格2的全部条件按多条标准连接起来,以单元格1的其余部分结束
- 带有2个search值的Excel VLOOKUP
- Excel VBA – 使用单元格中的值作为地址来定位另一个单元格
- 如果单元格不是四个确定的值之一,则复制整行