首页 > 解决方案 > 如何在Excel VBA的垂直列中生成多个json?

问题描述

使用excel宏第一行是json文件名,第二列以后是值。

以第一列作为json对象的key,只有第二列的值,只有第三列的值。

如何分别在与Excel相同的目录中批量生成json?

比如B列就是A列的值作为key,B列的值和b1.json。C列使用A列的值作为键,C列和c1.json的值

例如,当完成的 json 的描述到 C 列时,

b1.json

[{
a2: b2,
a3: b3,
a4: b4,
}]

c1.json

[{
a2: c2,
a3: c3,
a4: c4,
}]

并想生成。

标签: jsonexcelvba

解决方案


这是显示如何创建文件的 VBA 示例。将 JSON.bas模块从VBA JSON 解析器导入 VBA 项目以进行 JSON 处理,并包含对“Microsoft Scripting Runtime”的引用(看看这里如何导入模块和添加引用)。

将以下代码放入标准模块中:

Option Explicit

Sub test()

    With ActiveSheet.Cells(1, 1).CurrentRegion
        If .Cells.Count < 4 Then
            MsgBox "No data"
            Exit Sub
        End If
        Dim source
        source = .Value
    End With
    Dim i
    For i = 2 To UBound(source, 2)
        Dim data
        Set data = New Dictionary
        Dim j
        For j = 2 To UBound(source, 1)
            data(source(j, 1)) = source(j, i)
        Next
        saveTextToFile _
            JSON.Serialize(Array(data)), _
            ThisWorkbook.path & "\" & source(1, i) & ".json", _
            "UTF-8"
    Next
    MsgBox "Completed"

End Sub

Sub saveTextToFile(content, filePath, charset)

    With CreateObject("ADODB.Stream")
        .Type = 2 ' adTypeText
        .Open
        .charset = charset
        .WriteText content
        .Position = 0
        .Type = 1 ' TypeBinary
        .SaveToFile filePath, 2
        .Close
    End With

End Sub

我测试代码的源数据:

资源

输出如下:

文件1.json

[
    {
        "prop1": "Alice",
        "prop2": "Bob",
        "prop3": "Charlie",
        "prop4": "Eve",
        "prop5": "Dan"
    }
]

文件2.json

[
    {
        "prop1": "Tomatoes",
        "prop2": "Bananas",
        "prop3": "Watermelons",
        "prop4": "Apples",
        "prop5": "Grapefruit"
    }
]

文件 3.json

[
    {
        "prop1": "Russia",
        "prop2": "Canada",
        "prop3": "USA",
        "prop4": "China",
        "prop5": "Brazil"
    }
]

顺便说一句,其他答案中应用的类似方法。


推荐阅读