Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Генерация XML файла из Excel с использованием VBA / 11 сообщений из 11, страница 1 из 1
10.01.2017, 09:56
    #39381248
Beerukoff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация XML файла из Excel с использованием VBA
Пишу код по генерации XML файлов на основе данных из Excel

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

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

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

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

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

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

Код: 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
10.01.2017, 13:02
    #39381402
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация XML файла из Excel с использованием VBA
Ненене, не надо такого раздрызга. Надо, чтобы выложенный XML получался именно из выложенного XLSX именно выложенным кодом (ну или собсно XML можно не выкладывать, сами получим).

Опять же крайне желательно, чтобы нам не надо было догадываться, что написано в коде процедур ПоискЗначенияКода и ОформлениеXML, так что код надо кастрировать с оглядкой...
...
Рейтинг: 0 / 0
10.01.2017, 13:02
    #39381404
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация XML файла из Excel с использованием VBA
А ещё у нас тут есть тег SRC. И кнопка "Просмотр".
...
Рейтинг: 0 / 0
10.01.2017, 13:15
    #39381424
Beerukoff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация XML файла из Excel с использованием VBA
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
10.01.2017, 13:21
    #39381428
Beerukoff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Генерация XML файла из Excel с использованием VBA
А вот исходный файл, из которого берутся значения.

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


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