powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Словари, коллекции в VBA
4 сообщений из 4, страница 1 из 1
Словари, коллекции в VBA
    #39947932
NatM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть возможность, прошу подсказать, как реализовать вложенные структуры при конвертации из 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
Словари, коллекции в VBA
    #39947934
NatM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приложены файлы Как должно быть и Как есть.
...
Рейтинг: 0 / 0
Словари, коллекции в VBA
    #39947935
NatM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NatM,
...
Рейтинг: 0 / 0
Словари, коллекции в VBA
    #39948481
NatM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне удалось решить проблему. Закрываю тему.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Словари, коллекции в VBA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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