Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Словари, коллекции в VBA / 4 сообщений из 4, страница 1 из 1
16.04.2020, 11:09
    #39947932
NatM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Словари, коллекции в VBA
Если есть возможность, прошу подсказать, как реализовать вложенные структуры при конвертации из Excel в Json на VBA.
Как можно внутри цикла поместить все собранные элементы в еще один словарь с объединяющим ключом fields, а его - в словарь с ключом tables? По принципу "матрешка в матрешке" (описание полей таблиц находится внутри описания самих таблиц? По сути, это коллекция в словаре, который, в свою очередь, в другом словаре и т.п.

Процедура excelToJsonFileExample() в файле Книга2.xlsm корректно выводит в json поля таблиц.

Не получается вывести перед полями описания самих таблиц. Приложен скриншот как сейчас и как должно быть, а также Книга2.xlsm с кодом и jsonExample с результатом.

Пыталась добавить в цикл проверку If Not jsonDictionary1.Exists(Key) Then ..., т.к. выдавалась ошибка, что ключ уже создан. Но это к результату не привело.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Sub excelToJsonFileExample()
Dim excelRange As Range
Dim jsonItems As New Collection
Dim jsonDictionary As New Dictionary
Dim jsonDictionary1 As New Dictionary
Dim jsonDictionary2 As New Dictionary
Dim jsonFileObject As New FileSystemObject
Dim jsonFileExport As TextStream
Dim i As Long
Dim cell As Variant

Set excelRange = Cells(1, 1).CurrentRegion

'jsonDictionary2.Add "tables", jsonDictionary1
For i = 2 To excelRange.Rows.Count
    'If Not jsonDictionary1.Exists(Key) Then
        'Set jsonDictionary1 = New Dictionary
        'jsonDictionary1.Add "fields", jsonItems
    If Cells(i, 4) <> "id" Then
        jsonDictionary("name") = Cells(i, 4) 'словарь jsonDictionary пополнили ключами и элементами
        jsonDictionary("type") = Cells(i, 5)
        jsonDictionary("displayname") = JsonEncode(ByVal Cells(i, 6))
   
        'jsonItems.Add "fields"
        jsonItems.Add jsonDictionary 'словарь jsonDictionary добавили в коллекцию jsonItems
        Set jsonDictionary = Nothing
    End If
    'End If
Next i

jsonDictionary1.Add "tables", jsonItems 'добавляем в словарь jsonDictionary1 ключ "tables" и все элементы коллекции jsonItems

'change the path below to save where you desire
'Set jsonFileExport = jsonFileObject.CreateTextFile("C:\Users\username\Desktop\jsonExample.json", True)
Set jsonFileExport = jsonFileObject.CreateTextFile(Application.ActiveWorkbook.Path & "\jsonExample.json", True)
'"D:\\\\Json\jsonExample.json"
jsonFileExport.WriteLine ("""version"": ""1.0""")
jsonFileExport.WriteLine (JsonConverter.ConvertToJson(jsonDictionary1, Whitespace:=3))

End Sub



Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
16.04.2020, 11:10
    #39947934
NatM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Словари, коллекции в VBA
Приложены файлы Как должно быть и Как есть.
...
Рейтинг: 0 / 0
16.04.2020, 11:11
    #39947935
NatM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Словари, коллекции в VBA
NatM,
...
Рейтинг: 0 / 0
17.04.2020, 20:25
    #39948481
NatM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Словари, коллекции в VBA
Мне удалось решить проблему. Закрываю тему.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Словари, коллекции в VBA / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]