You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VBA解析JSON至Excel:仅能写入A1,无法拆分到其他单元格求助

解决VBA解析JSON并拆分到Excel单元格的问题

嗨,我来帮你搞定这个JSON拆分的难题!你已经成功把JSON内容拉到A1单元格了,接下来只需要借助专门的JSON解析工具,就能把嵌套的JSON数据拆分到不同单元格里。下面是具体的步骤和代码示例:

第一步:导入VBA-JSON解析库

原生VBA没有内置JSON解析功能,我们需要用到VBA-JSON这个常用的工具,它能把JSON字符串转换成VBA可操作的字典(Dictionary)和集合(Collection):

  • 打开VBA编辑器,点击「插入」→「模块」,把VBA-JSON的代码粘贴进去(你可以直接在网上找到这个开源代码复制过来)
  • 然后在「工具」→「引用」里勾选「Microsoft Scripting Runtime」,这是用来支持字典对象的必要引用

第二步:编写解析JSON的VBA代码

下面的代码会读取A1单元格的JSON内容,解析后把顶层字段和list数组里的嵌套数据拆分到不同单元格:

Sub ParseJSONToCells()
    Dim jsonStr As String
    Dim jsonObj As Object ' 解析后的JSON对象
    Dim listCol As Collection ' 存储list数组的集合
    Dim listItem As Object ' list数组里的单个对象
    Dim key As Variant
    Dim rowNum As Integer
    Dim colNum As Integer
    
    ' 1. 读取A1单元格的JSON字符串
    jsonStr = ThisWorkbook.Sheets("Sheet1").Range("A1").Value
    If jsonStr = "" Then
        MsgBox "A1单元格没有JSON内容!"
        Exit Sub
    End If
    
    ' 2. 解析JSON字符串
    On Error Resume Next
    Set jsonObj = JsonConverter.ParseJson(jsonStr)
    On Error GoTo 0
    If jsonObj Is Nothing Then
        MsgBox "JSON解析失败,请检查格式是否正确!"
        Exit Sub
    End If
    
    ' 3. 写入顶层字段(@type、@self)
    rowNum = 1
    colNum = 2 ' 从B列开始写入
    ' 处理@type数组
    ThisWorkbook.Sheets("Sheet1").Cells(rowNum, colNum).Value = "顶层@type"
    colNum = colNum + 1
    For Each key In jsonObj("@type")
        ThisWorkbook.Sheets("Sheet1").Cells(rowNum, colNum).Value = key
        colNum = colNum + 1
    Next key
    ' 处理@self
    rowNum = rowNum + 1
    colNum = 2
    ThisWorkbook.Sheets("Sheet1").Cells(rowNum, colNum).Value = "顶层@self"
    colNum = colNum + 1
    ThisWorkbook.Sheets("Sheet1").Cells(rowNum, colNum).Value = jsonObj("@self")
    
    ' 4. 处理list数组里的嵌套对象
    rowNum = rowNum + 2 ' 空一行分隔开
    colNum = 2
    If jsonObj.Exists("list") Then
        Set listCol = jsonObj("list")
        ' 先写入list对象的键作为表头
        For Each key In listCol(1).Keys
            ThisWorkbook.Sheets("Sheet1").Cells(rowNum, colNum).Value = key
            colNum = colNum + 1
        Next key
        rowNum = rowNum + 1
        ' 写入list对象的每个值
        colNum = 2
        For Each key In listCol(1).Keys
            ThisWorkbook.Sheets("Sheet1").Cells(rowNum, colNum).Value = listCol(1)(key)
            colNum = colNum + 1
        Next key
    Else
        MsgBox "JSON中不存在list数组!"
    End If
    
    ' 自动调整列宽,让内容更美观
    ThisWorkbook.Sheets("Sheet1").Columns.AutoFit
    MsgBox "JSON解析完成!"
End Sub

代码小说明

  • JsonConverter.ParseJson是VBA-JSON的核心函数,负责把JSON字符串转成VBA能操作的对象
  • 顶层的@type是数组,所以用循环遍历每个元素写入单元格
  • 如果你的list数组里有多个对象,只需要加一个循环遍历listCol里的每个元素,就能把所有对象的数据都拆出来
  • 代码里默认用「Sheet1」,如果你的工作表名称不一样,记得把代码里的Sheet1改成你的工作表名

运行代码

  1. 确保A1单元格已经有获取到的JSON内容
  2. 在VBA编辑器里找到这个宏,点击运行按钮,或者在Excel里通过「开发工具」→「宏」选择ParseJSONToCells运行就行

内容的提问来源于stack exchange,提问作者Kai K

火山引擎 最新活动