【问题标题】:Webscrape Json using Excel VBA using VBA-JSON addonWebscrape Json 使用 Excel VBA 使用 VBA-JSON 插件
【发布时间】:2021-04-09 22:37:47
【问题描述】:

我按照指南 https://github.com/VBA-tools/VBA-JSON 安装包,此外还启用 Microsoft Scripting Runtime 和 Microsoft Script Control。

我希望获得有关如何将以下字典导入数据表的指导,该数据表将显示:

fiscalDateEnding totalRevenue netIncome
dates $

对于此页面上列出的所有日期:https://www.alphavantage.co/query?function=INCOME_STATEMENT&symbol=IBM&apikey=demo

谢谢!

【问题讨论】:

  • (Powerquery) 使用内置数据 > 工具 > 来自网络并使用您的网址。然后扩展通过扩展为表格的两个单独列表返回的 json 非常简单(每年一次或每季度一次)。您可以将其作为两个单独的查询来执行,然后合并、保持分开,甚至将 M 脚本从单独的脚本中取出并重新写入单个脚本。请参阅 minimal reproducible exampleHow to Ask 获取有关向我们展示您尝试过的内容、解释您遇到的问题并提供最小可重复示例的建议。

标签: javascript json excel vba web-scraping


【解决方案1】:

使用 Power Query 可能更简单,但为了回答您有关使用 vba 例程的问题,我提供以下代码:(我将 json 放入文本文件,但您可以直接从 alphaVantage 读取它)

Option Explicit
Sub processJson()
    Dim jsonFile As String
    Dim jsonText As String
    Dim jsonObj As Object
    Dim FSO As FileSystemObject, TS As TextStream
    Dim vRes As Variant, I As Long, J As Long
        
jsonFile = "c:\users\ron\desktop\json.txt"
Set FSO = New FileSystemObject
Set TS = FSO.OpenTextFile(jsonFile, ForReading, False, TristateUseDefault)
jsonText = TS.ReadAll

Set jsonObj = parsejson(jsonText)

Dim annReports As Collection
Set annReports = jsonObj("annualReports")

ReDim vRes(0 To annReports.Count, 1 To 3)

'Headers (also serve as keys to the dictionaries in the collection)
    vRes(0, 1) = "fiscalDateEnding"
    vRes(0, 2) = "totalRevenue"
    vRes(0, 3) = "netIncome"

'populate data
For I = 1 To annReports.Count
    For J = 1 To 3
        vRes(I, J) = annReports(I)(vRes(0, J))
    Next J
Next I

With Worksheets("json")
    .Cells.Clear
    With .Range("a1").Resize(rowsize:=UBound(vRes, 1) + 1, columnsize:=UBound(vRes, 2))
        .Value = vRes
        .Style = "Output"
        Range(.Columns(2), .Columns(3)).NumberFormat = "_($* #,##0_);_($* (#,##0);_($* "" - ""_);_(@_)"
        .EntireColumn.AutoFit
    End With
End With
    
End Sub

对于您的数据,这是输出:

我建议您逐步执行宏,检查各个步骤的本地窗口,以便最好地了解发生了什么。

【讨论】:

    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多