Как создать несколько json в вертикальном столбце в Excel VBA? - PullRequest
1 голос
/ 09 февраля 2020

Использование макроса Excel Первая строка - это имя файла json, а второй и последующие столбцы - значения.

С первым столбцом в качестве ключа к объекту json, только значения во втором столбце и только значения в третьем столбце.

Как создать json в пакетах в том же каталоге, что и Excel соответственно?

Например, столбец B - это значение столбца A в качестве ключа, значение столбца 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,
}]

И хочу быть сгенерированным.

1 Ответ

1 голос
/ 09 февраля 2020

Вот пример 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

Исходные данные, которые я тестировал код с:

source

Вывод выглядит следующим образом:

file1. json

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

file2. json

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

file3. json

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

BTW , аналогичный подход применяется в других ответах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...