powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Генерация XML файла из Excel с использованием VBA
11 сообщений из 11, страница 1 из 1
Генерация XML файла из Excel с использованием VBA
    #39381248
Beerukoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу код по генерации XML файлов на основе данных из Excel

Ветки создаются таким кодом, который просто вручную повторяется нужное количество раз (в примере Pledgor создаваемая ветка, Pledgors ветка верхнего уровня)

Set Pledgor = xmlDoc.createElement( "Pledgor" )
Pledgors .appendChild Pledgor

Хочу сделать на его основе универсальный код, чтобы вставить в цикл (нужно, чтобы макрос генерил подветку с именем, заданной в Переменной1, для ветки с именем, заданной в Переменной2).

Выделенные курсивом места по логике должны корректно замениться на переменные, а вот выделенное жирным не получается.

Подскажите пжл как корректно это сделать?
...
Рейтинг: 0 / 0
Генерация XML файла из Excel с использованием VBA
    #39381269
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beerukoffа вот выделенное жирным не получаетсяА какой тип переменной?
...
Рейтинг: 0 / 0
Генерация XML файла из Excel с использованием VBA
    #39381309
Beerukoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я пока в целом не понимаю как правильно написать код, чтобы не создавать вручную последовательно все ветки и подветки.

Pledgors в данном случае это подветка для ветки Pledgor.
...
Рейтинг: 0 / 0
Генерация XML файла из Excel с использованием VBA
    #39381341
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы бы выложили небольшой эксельный файлик-образец строк на десять, да XML, который хотите из него получить... ну и само собой в файле код как он есть сейчас.
...
Рейтинг: 0 / 0
Генерация XML файла из Excel с использованием VBA
    #39381354
Beerukoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот экселевский файл, по которому хочу сформировать дерево (чем правее колонка тем более подветка).
...
Рейтинг: 0 / 0
Генерация XML файла из Excel с использованием VBA
    #39381355
Beerukoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот целевой XML файл (это небольшой кусок файла, для тренировки)
...
Рейтинг: 0 / 0
Генерация XML файла из Excel с использованием VBA
    #39381364
Beerukoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот код, из которого видно, что каждую ветку/подветку я сейчас генерю вручную, что, в принципе, работает, но очень сложно и запутанно получается.

Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
Sub Просто()
    Set xmlDoc = CreateObject("Microsoft.XMLDOM")
    Set objNode = xmlDoc.createProcessingInstruction( _
                "xml", "version=""1.0"" encoding=""utf-8"" standalone=""yes""")
    Set objNode = xmlDoc.InsertBefore(objNode, xmlDoc.ChildNodes.Item(0))
    Set Comments = xmlDoc.createComment("generated by BeerukoffNotariat " & Mid(ActiveWindow.Caption, 20, 3))
    xmlDoc.InsertBefore Comments, NotificationData
    Set PledgeNotificationToNotary = xmlDoc.createElement("PledgeNotificationToNotary")
    Set xmlDoc.DocumentElement = PledgeNotificationToNotary
    PledgeNotificationToNotary.setAttribute "xmlns", "http://dev.triasoft.com/schemas/eis/eregistry/pppr/2.0"
    PledgeNotificationToNotary.setAttribute "version", "2.0"
    Set NotificationData = xmlDoc.createElement("NotificationData")
    NotificationData.setAttribute "version", "2.0"
    PledgeNotificationToNotary.appendChild NotificationData
    ПоискЗначенияКода "ТипУведомления", "Форма"
    Set FormTip = xmlDoc.createElement(ЗначениеКода)
    NotificationData.appendChild FormTip

'Залогодатель
    Set Pledgee1 = xmlDoc.createElement("Pledgee")
    FormTip.appendChild Pledgee1
    Set Pledgee2 = xmlDoc.createElement("Pledgee")
    Pledgee1.appendChild Pledgee2
    Set PledgeeOrganization = xmlDoc.createElement("Organization")
    Pledgee2.appendChild PledgeeOrganization
    Set PledgeeRussianOrganization = xmlDoc.createElement("RussianOrganization")
    PledgeeOrganization.appendChild PledgeeRussianOrganization
    Set NameFull = xmlDoc.createElement("NameFull")
    ПоискЗначенияКода "НаименованиеБанка", "Настройки"
    NameFull.Text = ЗначениеКода
    PledgeeRussianOrganization.appendChild NameFull
    Set OGRN = xmlDoc.createElement("OGRN")
    ПоискЗначенияКода "ОГРНБанка", "Настройки"
    OGRN.Text = ЗначениеКода
    PledgeeRussianOrganization.appendChild OGRN
    Set INN = xmlDoc.createElement("INN")
    ПоискЗначенияКода "ИННБанка", "Настройки"
    INN.Text = ЗначениеКода
    PledgeeRussianOrganization.appendChild INN
    Set PledgeeRussianOrganizationAddress = xmlDoc.createElement("Address")
    PledgeeRussianOrganization.appendChild PledgeeRussianOrganizationAddress
    Set RegionCode = xmlDoc.createElement("RegionCode")
    ПоискЗначенияКода "КодСубъектаБанка", "Настройки"
    RegionCode.Text = ЗначениеКода
    PledgeeRussianOrganizationAddress.appendChild RegionCode
    Set Region = xmlDoc.createElement("Region")
    ПоискЗначенияКода "НаименованиеСубъектаБанка", "Настройки"
    Region.Text = ЗначениеКода
    PledgeeRussianOrganizationAddress.appendChild Region
    Set City = xmlDoc.createElement("City")
    ПоискЗначенияКода "ГородБанка", "Настройки"
    City.Text = ЗначениеКода
    PledgeeRussianOrganizationAddress.appendChild City
    Set Street = xmlDoc.createElement("Street")
    ПоискЗначенияКода "УлицаБанка", "Настройки"
    Street.Text = ЗначениеКода
    PledgeeRussianOrganizationAddress.appendChild Street
    Set House = xmlDoc.createElement("House")
    ПоискЗначенияКода "ДомБанка", "Настройки"
    House.Text = ЗначениеКода
    PledgeeRussianOrganizationAddress.appendChild House
    Set Email = xmlDoc.createElement("Email")
    ПоискЗначенияКода "EmailБанка", "Настройки"
    Email.Text = ЗначениеКода
    PledgeeRussianOrganization.appendChild Email
  
ОформлениеXML xmlDoc, vbCrLf

    strFilePath = ThisWorkbook.Path & "\Test.xml"
    xmlDoc.Save strFilePath
End Sub
...
Рейтинг: 0 / 0
Генерация XML файла из Excel с использованием VBA
    #39381402
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ненене, не надо такого раздрызга. Надо, чтобы выложенный XML получался именно из выложенного XLSX именно выложенным кодом (ну или собсно XML можно не выкладывать, сами получим).

Опять же крайне желательно, чтобы нам не надо было догадываться, что написано в коде процедур ПоискЗначенияКода и ОформлениеXML, так что код надо кастрировать с оглядкой...
...
Рейтинг: 0 / 0
Генерация XML файла из Excel с использованием VBA
    #39381404
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё у нас тут есть тег SRC. И кнопка "Просмотр".
...
Рейтинг: 0 / 0
Генерация XML файла из Excel с использованием VBA
    #39381424
Beerukoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Процедура ПоискЗначенияКода просто ищет в таблице графу с входящим названием и возвращает значение, к примеру ищет "ИНН" и возвращает нужное значение.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub ПоискЗначенияКода(Код As String, Лист As String)
With Worksheets(Лист).Columns("K:K")
    Set Результат = .Find(What:=Код, LookIn:=xlValues)
    If Not Результат Is Nothing Then
        firstAddress = Результат.Address 'запоминаем адресс первой найденой ячейки
        Do
        If Sheets(Лист).Cells(Результат.Row, Результат.Column + 1) <> "" Then ЗначениеКода = Sheets(Лист).Cells(Результат.Row, Результат.Column + 1) Else ЗначениеКода = Sheets(Лист).Cells(Результат.Row, Sheets(Лист).Cells(Результат.Row, Результат.Column + 2))
            Set Результат = .FindNext(Результат) 'ищем следующую
        Loop While Not Результат Is Nothing And Результат.Address <> firstAddress 'выход из цикла при переходе снова на перую
    End If
End With
End Sub



Процедура ОформлениеXML (нашел ее на одном из форумов) просто украшает получившийся файл вставкой отступов, иначе все в одну строку получается
Код: 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.
Private Sub ОформлениеXML(node, levelIndent As String)
    Dim objNewText, child
    Dim bolExit As Boolean

    ' если нет дочерних нодов, то выходим
    If Not node.HasChildNodes Then Exit Sub
    ' перебираем все дочерние ноды и добавляем перед каждым отступ
    Set child = node.FirstChild
    Do Until child Is Nothing
        If child.NodeType = 1 Then
          ' отступ перед открывающим тегом
          If Not node.OwnerDocument Is Nothing Then
             Set objNewText = node.OwnerDocument.createTextNode(levelIndent)
             node.InsertBefore objNewText, child
          End If
          ' отступ перед закрывающим тегом
          If child.ChildNodes.Item(0).NodeType <> 3 Then   ' отступ перед закрывающим тегом Node_Text не нужен
             If Not node.OwnerDocument Is Nothing Then
                Set objNewText = node.OwnerDocument.createTextNode(levelIndent)
             Else
                Set objNewText = node.createTextNode(levelIndent)
             End If
             child.appendChild (objNewText)
          End If
          ' запускаем рекурсию для дочерних нодов текущего нода
          ОформлениеXML child, levelIndent & "  "
        End If
        ' переходим к следующему ноду вниз по дереву от текущего
        Set child = child.NextSibling
    Loop
End Sub
...
Рейтинг: 0 / 0
Генерация XML файла из Excel с использованием VBA
    #39381428
Beerukoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот исходный файл, из которого берутся значения.

Справа на листе как раз есть дерево, на основании которого я и хочу сформировать XML файл (в реальности он будет намного больше, но если получится сформировать этот кусок, то дальше все уже будет просто).
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Генерация XML файла из Excel с использованием VBA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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