从网站下载文件

时间:2017-07-19 20:54:03

标签: excel vba excel-vba excel-vba-mac

我在Mac上使用Excel 2011,这意味着我无法(或者至少我不知道如何)导航到网页并将数据从下载链接保存到Excel工作簿中。 在这个网站上,

https://finance.yahoo.com/quote/SPY/history?period1=1342681200&period2=1500447600&interval=1d&filter=history&frequency=1d

  Sub Test()

  Dim ws As Worksheet
  Dim qr As QueryTable
  Dim URL As String


  Set ws = Worksheets("Sheet1")

  Sheets("Sheet1").Cells.Clear
  URL = "https://finance.yahoo.com/quote/SPY/history?period1=1342681200&period2=1500447600&interval=1d&filter=history&frequency=1d"

  Set qr = ws.QueryTables.Add( _
      Connection:="URL;" & URL, _
      Destination:=Range("A1"))
      qr.RefreshStyle = xlOverwriteCells = True
      qr.BackgroundQuery = True
      qr.SaveData = True
      qr.Refresh BackgroundQuery = False


  End Sub

有一个“下载数据”按钮。我试图将这些数据放入Excel中,这样我就可以计算出5年的标准偏差。谢谢!!

我遇到的一个问题是你必须向下滚动才能查看所有日期,所以当我将数据输入查询表时,它只会从最初显示的日期中提取数据

3 个答案:

答案 0 :(得分:1)

好的,我现在明白了。看看下面的链接。

http://investexcel.net/multiple-stock-quote-downloader-for-excel/

从标题为“获取Excel电子表格”的链接下载该文件,以从Google财经中下载批量历史股票数据'。那会给你你想要的。我会在这里发布代码,但它非常广泛,可能不一定有用。

enter image description here

'Samir Khan
'simulationconsultant@gmail.com
'The latest version of this spreadsheet can be downloaded from http://investexcel.net/multiple-stock-quote-downloader-for-excel/
'Please link to http://investexcel.net if you like this spreadsheet


Sub DownloadStockQuotes(ByVal stockTicker As String, ByVal StartDate As Date, ByVal EndDate As Date, ByVal DestinationCell As String, ByVal freq As String)

Dim qurl As String
Dim StartMonth, StartDay, StartYear, EndMonth, EndDay, EndYear As String

qurl = "http://finance.google.com/finance/historical?q=" & stockTicker
qurl = qurl & "&startdate=" & MonthName(Month(StartDate), True) & _
       "+" & Day(StartDate) & "+" & Year(StartDate) & _
       "&enddate=" & MonthName(Month(EndDate), True) & _
       "+" & Day(EndDate) & "+" & Year(EndDate) & "&output=csv"

On Error GoTo ErrorHandler:

QueryQuote:
With ActiveSheet.QueryTables.Add(Connection:="URL;" & qurl, Destination:=Range(DestinationCell))
    .BackgroundQuery = True
    .TablesOnlyFromHTML = False
    .Refresh BackgroundQuery:=False
    .SaveData = True
End With

ErrorHandler:

End Sub

Sub DownloadData()

Dim frequency As String
Dim numRows As Integer
Dim lastRow As Integer
Dim lastErrorRow As Integer
Dim lastSuccessRow As Integer
Dim stockTicker As String
Dim numStockErrors As Integer
Dim numStockSuccess As Integer

numStockErrors = 0
numStockSuccess = 0

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

lastErrorRow = ActiveSheet.Cells(Rows.Count, "J").End(xlUp).Row
lastSuccessRow = ActiveSheet.Cells(Rows.Count, "L").End(xlUp).Row

ClearErrorList lastErrorRow
ClearSuccessList lastSuccessRow

lastRow = ActiveSheet.Cells(Rows.Count, "a").End(xlUp).Row
frequency = Worksheets("Parameters").Range("b7")

'Delete all sheets apart from Parameters sheet
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each ws In Worksheets
    If ws.Name <> "Parameters" And ws.Name <> "About" Then ws.Delete
Next

Application.DisplayAlerts = True

'Loop through all tickers
For ticker = 12 To lastRow

    stockTicker = Worksheets("Parameters").Range("$a$" & ticker)

    If stockTicker = "" Then
        GoTo NextIteration
    End If

    Sheets.Add After:=Sheets(Sheets.Count)

    If InStr(stockTicker, ":") > 0 Then
        ActiveSheet.Name = Replace(stockTicker, ":", "")
    Else
        ActiveSheet.Name = stockTicker
    End If

    Cells(1, 1) = "Stock Quotes for " & stockTicker
    Call DownloadStockQuotes(stockTicker, Worksheets("Parameters").Range("$b$5"), Worksheets("Parameters").Range("$b$6"), "$a$2", frequency)
    Columns("a:a").TextToColumns Destination:=Range("a1"), DataType:=xlDelimited, _
                                 TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
                                 Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1))


    If InStr(stockTicker, ":") > 0 Then
        stockTicker = Replace(stockTicker, ":", "")
    End If

    Sheets(stockTicker).Columns("A:G").ColumnWidth = 10

    lastRow = Sheets(stockTicker).UsedRange.Row - 2 + Sheets(stockTicker).UsedRange.Rows.Count

    If lastRow < 3 Then
        Application.DisplayAlerts = False
        Sheets(stockTicker).Delete
        numStockErrors = numStockErrors + 1
        ErrorList stockTicker, numStockErrors
        GoTo NextIteration
        Application.DisplayAlerts = True
    Else
        numStockSuccess = numStockSuccess + 1
        If Left(stockTicker, 1) = "^" Then
            SuccessList Replace(stockTicker, "^", ""), numStockSuccess
        Else
            SuccessList stockTicker, numStockSuccess
        End If
    End If

    Sheets(stockTicker).Sort.SortFields.Add Key:=Range("A3:A" & lastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With Sheets(stockTicker).Sort
        .SetRange Range("A2:G" & lastRow)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

    Range("a3:a" & lastRow).NumberFormat = "yyyy-mm-dd;@"

    'Delete final blank row otherwise will get ,,,, at bottom of CSV
    Sheets(stockTicker).Rows(lastRow + 1 & ":" & Sheets(stockTicker).Rows.Count).Delete

    'Remove initial ^ in ticker names from Sheets
    If Left(stockTicker, 1) = "^" Then
        ActiveSheet.Name = Replace(stockTicker, "^", "")
    Else
        ActiveSheet.Name = stockTicker
    End If

    'Remove hyphens in ticker names from Sheet names, otherwise error in collation
    If InStr(stockTicker, "-") > 0 Then
        ActiveSheet.Name = Replace(stockTicker, "-", "")
    End If


NextIteration:
Next ticker

Application.DisplayAlerts = False

If Sheets("Parameters").Shapes("WriteToCSVCheckBox").ControlFormat.Value = xlOn Then
    On Error GoTo ErrorHandler:
    Call CopyToCSV
End If

If Sheets("Parameters").Shapes("CollateDataCheckBox").ControlFormat.Value = xlOn Then
    On Error GoTo ErrorHandler:
    Call CollateData
End If

ErrorHandler:

Worksheets("Parameters").Select

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Worksheets("Parameters").Select
For Each C In ThisWorkbook.Connections
    C.Delete
Next

End Sub
Sub CollateData()

Dim ws As Worksheet
Dim i As Integer, first As Integer
Dim maxRow As Integer
Dim maxTickerWS As Worksheet

maxRow = 0
For Each ws In Worksheets
    If ws.Name <> "Parameters" Then
        If ws.UsedRange.Rows.Count > maxRow Then
            maxRow = ws.UsedRange.Rows.Count
            Set maxTickerWS = ws
        End If
    End If
Next

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Open"

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "High"

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Low"

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Close"

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Volume"

Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Adjusted Close"

i = 1
maxTickerWS.Range("A2", "B" & maxRow).Copy Destination:=Sheets("Open").Cells(1, i)
Sheets("Open").Cells(1, i + 1) = maxTickerWS.Name

maxTickerWS.Range("A2", "a" & maxRow).Copy Destination:=Sheets("High").Cells(1, i)
maxTickerWS.Range("c2", "c" & maxRow).Copy Destination:=Sheets("High").Cells(1, i + 1)
Sheets("High").Cells(1, i + 1) = maxTickerWS.Name

maxTickerWS.Range("A2", "a" & maxRow).Copy Destination:=Sheets("Low").Cells(1, i)
maxTickerWS.Range("d2", "d" & maxRow).Copy Destination:=Sheets("Low").Cells(1, i + 1)
Sheets("Low").Cells(1, i + 1) = maxTickerWS.Name

maxTickerWS.Range("A2", "a" & maxRow).Copy Destination:=Sheets("Close").Cells(1, i)
maxTickerWS.Range("e2", "e" & maxRow).Copy Destination:=Sheets("Close").Cells(1, i + 1)
Sheets("Close").Cells(1, i + 1) = maxTickerWS.Name

maxTickerWS.Range("A2", "a" & maxRow).Copy Destination:=Sheets("Volume").Cells(1, i)
maxTickerWS.Range("f2", "f" & maxRow).Copy Destination:=Sheets("Volume").Cells(1, i + 1)
Sheets("Volume").Cells(1, i + 1) = maxTickerWS.Name

maxTickerWS.Range("A2", "a" & maxRow).Copy Destination:=Sheets("Adjusted Close").Cells(1, i)
maxTickerWS.Range("g2", "g" & maxRow).Copy Destination:=Sheets("Adjusted Close").Cells(1, i + 1)
Sheets("Adjusted Close").Cells(1, i + 1) = maxTickerWS.Name

i = i + 2

For Each ws In Worksheets

    If ws.Name <> "Parameters" And ws.Name <> "About" And ws.Name <> maxTickerWS.Name And ws.Name <> "Open" And ws.Name <> "High" And ws.Name <> "Low" And ws.Name <> "Close" And ws.Name <> "Volume" And ws.Name <> "Adjusted Close" Then

        Sheets("Open").Cells(1, i) = ws.Name
        Sheets("Open").Range(Sheets("Open").Cells(2, i), Sheets("Open").Cells(maxRow - 1, i)).Formula = _
        "=vlookup(A2," & ws.Name & "!A$2:G$" & maxRow & ",2,0)"

        Sheets("High").Cells(1, i) = ws.Name
        Sheets("High").Range(Sheets("High").Cells(2, i), Sheets("High").Cells(maxRow - 1, i)).Formula = _
        "=vlookup(A2," & ws.Name & "!A$2:G$" & maxRow & ",3,0)"

        Sheets("Low").Cells(1, i) = ws.Name
        Sheets("Low").Range(Sheets("Low").Cells(2, i), Sheets("Low").Cells(maxRow - 1, i)).Formula = _
        "=vlookup(A2," & ws.Name & "!A$2:G$" & maxRow & ",4,0)"

        Sheets("Close").Cells(1, i) = ws.Name
        Sheets("Close").Range(Sheets("Close").Cells(2, i), Sheets("Close").Cells(maxRow - 1, i)).Formula = _
        "=vlookup(A2," & ws.Name & "!A$2:G$" & maxRow & ",5,0)"

        Sheets("Volume").Cells(1, i) = ws.Name
        Sheets("Volume").Range(Sheets("Volume").Cells(2, i), Sheets("Volume").Cells(maxRow - 1, i)).Formula = _
        "=vlookup(A2," & ws.Name & "!A$2:G$" & maxRow & ",6,0)"

        Sheets("Adjusted Close").Cells(1, i) = ws.Name
        Sheets("Adjusted Close").Range(Sheets("Adjusted Close").Cells(2, i), Sheets("Adjusted Close").Cells(maxRow - 1, i)).Formula = _
        "=vlookup(A2," & ws.Name & "!A$2:G$" & maxRow & ",7,0)"

        i = i + 1

    End If
Next

On Error Resume Next

Sheets("Open").UsedRange.SpecialCells(xlFormulas, xlErrors).Clear
Sheets("Close").UsedRange.SpecialCells(xlFormulas, xlErrors).Clear
Sheets("High").UsedRange.SpecialCells(xlFormulas, xlErrors).Clear
Sheets("Low").UsedRange.SpecialCells(xlFormulas, xlErrors).Clear
Sheets("Volume").UsedRange.SpecialCells(xlFormulas, xlErrors).Clear
Sheets("Adjusted Close").UsedRange.SpecialCells(xlFormulas, xlErrors).Clear

On Error GoTo 0

Sheets("Open").Columns("A:A").EntireColumn.AutoFit
Sheets("High").Columns("A:A").EntireColumn.AutoFit
Sheets("Low").Columns("A:A").EntireColumn.AutoFit
Sheets("Close").Columns("A:A").EntireColumn.AutoFit
Sheets("Volume").Columns("A:A").EntireColumn.AutoFit
Sheets("Adjusted Close").Columns("A:A").EntireColumn.AutoFit
End Sub

Sub SuccessList(ByVal stockTicker As String, ByVal numStockSuccess As Integer)

Sheets("Parameters").Range("L" & 10 + numStockSuccess) = stockTicker

Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlDiagonalDown).LineStyle = xlNone
Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlDiagonalUp).LineStyle = xlNone
Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlEdgeLeft).LineStyle = xlNone
Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlEdgeTop).LineStyle = xlNone
Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlEdgeBottom).LineStyle = xlNone
Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlEdgeRight).LineStyle = xlNone
Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlInsideVertical).LineStyle = xlNone
Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlInsideHorizontal).LineStyle = xlNone
Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlDiagonalDown).LineStyle = xlNone
Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlDiagonalUp).LineStyle = xlNone

With Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
End With
With Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
End With
With Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
End With
With Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
End With

Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlInsideVertical).LineStyle = xlNone
Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Borders(xlInsideHorizontal).LineStyle = xlNone

With Sheets("Parameters").Range("L10:L" & 10 + numStockSuccess).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorAccent2
    .TintAndShade = 0.799981688894314
    .PatternTintAndShade = 0
End With

End Sub

Sub ErrorList(ByVal stockTicker As String, ByVal numStockErrors As Integer)

Sheets("Parameters").Range("J" & 10 + numStockErrors) = stockTicker

Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlDiagonalDown).LineStyle = xlNone
Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlDiagonalUp).LineStyle = xlNone
Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlEdgeLeft).LineStyle = xlNone
Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlEdgeTop).LineStyle = xlNone
Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlEdgeBottom).LineStyle = xlNone
Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlEdgeRight).LineStyle = xlNone
Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlInsideVertical).LineStyle = xlNone
Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlInsideHorizontal).LineStyle = xlNone
Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlDiagonalDown).LineStyle = xlNone
Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlDiagonalUp).LineStyle = xlNone

With Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
End With
With Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
End With
With Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
End With
With Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .ColorIndex = 0
    .TintAndShade = 0
    .Weight = xlMedium
End With

Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlInsideVertical).LineStyle = xlNone
Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Borders(xlInsideHorizontal).LineStyle = xlNone

With Sheets("Parameters").Range("J10:J" & 10 + numStockErrors).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorAccent2
    .TintAndShade = 0.799981688894314
    .PatternTintAndShade = 0
End With

End Sub

Sub ClearErrorList(ByVal lastErrorRow As Integer)
If lastErrorRow > 10 Then
    Worksheets("Parameters").Range("J11:J" & lastErrorRow).Clear
    With Sheets("Parameters").Range("J10").Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Sheets("Parameters").Range("J10").Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Sheets("Parameters").Range("J10").Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Sheets("Parameters").Range("J10").Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
End If
End Sub

Sub ClearSuccessList(ByVal lastSuccessRow As Integer)
If lastSuccessRow > 10 Then
    Worksheets("Parameters").Range("L11:L" & lastSuccessRow).Clear
    With Sheets("Parameters").Range("L10").Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Sheets("Parameters").Range("L10").Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Sheets("Parameters").Range("L10").Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Sheets("Parameters").Range("L10").Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
End If
End Sub


Sub CopyToCSV()

Dim MyPath As String
Dim MyFileName As String

dateFrom = Worksheets("Parameters").Range("$b$5")
dateTo = Worksheets("Parameters").Range("$b$6")
frequency = Worksheets("Parameters").Range("$b$7")
MyPath = Worksheets("Parameters").Range("$b$8")

For Each ws In Worksheets
    If ws.Name <> "Parameters" And ws.Name <> "About" Then
        ticker = ws.Name
        MyFileName = ticker & " " & Format(dateFrom, "dd-mm-yyyy") & " - " & Format(dateTo, "dd-mm-yyyy") & " " & frequency
        If Not Right(MyPath, 1) = "\" Then MyPath = MyPath & "\"
        If Not Right(MyFileName, 4) = ".csv" Then MyFileName = MyFileName & ".csv"
        Sheets(ticker).Copy
        With ActiveWorkbook
            .SaveAs Filename:= _
                    MyPath & MyFileName, _
                    FileFormat:=xlCSV, _
                    CreateBackup:=False
            .Close False
        End With
    End If
Next

End Sub

答案 1 :(得分:1)

这里是我收集的所有信息

第一个链接: 转到https://finance.yahoo.com/quote/SPY/history?period1=0&period2=1900000000&interval=1d&filter=history&frequency=1d

我将开始日期更改为零,结束日期更改为1900000000,即1970年1月1日至2030年3月17日。(unix timestamps)

右键点击“下载数据”链接...复制链接地址

提供第二个链接: https://query1.finance.yahoo.com/v7/finance/download/SPY?period1=0&period2=1900000000&interval=1d&events=history&crumb=aGnIEkELa61

导航到该URL会返回一个跨越1993年1月29日至今的SPY.csv文件(今天是今天直到2030年)

每次需要新数据(使用cURL)时,您的程序必须转到该URL(第二个链接),并将csv文件下载到内存中并保存。

现在是catch,下载URL不是第一个链接的html源中的明文。

这是您的程序必须执行的操作:(它不会使用Web浏览器,而是cURL,这是一个可以从Web服务器请求数据的程序)

您执行这些步骤以便了解所涉及的内容

使用谷歌浏览器打开第一个链接...右键单击...查看页面源

将源复制并粘贴到文本编辑器中

搜索crumb值(第二个链接中的aGnIEkELa61)(btw:它是一个cookie)

这显示你在哪里找到面包屑(你的程序不知道面包屑的价值,它必须在这里找到它)

汇总查询网址......

url = "https://query1.finance.yahoo.com/v7/finance/download/SPY?period1=0&period2=1900000000&interval=1d&events=history&crumb=" & crumbValue

导航到生成的URL并下载csv文本数据并进行处理

回顾一下:

所有由cURL完成的下载由脚本调用

将第一个链接下载到内存并解析(查找crumb的值)

使用crumb计算另一个URL(csv数据)

将计算网址中的数据下载到内存中并解析成表格(或保存并导入......可能更容易)

答案 2 :(得分:1)

我使用了@ ryguy72发布的一些代码和Open CSV file with correct data format for each column using TextFileColumnDataTypes?的部分代码 将这个最小的代码作为测试。

它可以在Windows中运行,也许它可以在Mac上运行(在电子表格上创建一个表格,并用程序中的网址中的库存数据填充它)

不是 With 块中的所有参数都是必要的,我认为,但是由你来评估哪些参数并运行代码(当然它们都可以)留在)

Sub DownloadStockQuotes()

    Dim qurl As String
    qurl = "http://finance.google.com/finance/historical?q=SPY&startdate=Jan+01+1970&enddate=Dec+31+2050&output=csv"

    Dim qt As QueryTable
    Set qt = ActiveSheet.QueryTables.Add(connection:="TEXT;" & qurl, Destination:=Range("b2"))

    With qt
        .Name = "Output"
        .FieldNames = True
        .RowNumbers = True
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False

        .TextFileColumnDataTypes = Array(2)         ' This doesn't make any difference anymore

        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False

    End With
End Sub