С помощью пользователей данного форума победил задачу по импорту данных из XML в Excel.
Теперь хочется победить и обратную задачу по созданию XML файла из Excel.
Перечитал кучу статей и форумов, найденных с помощью Яндекса, слазил даже к иностранцам. Нашел массу примеров, которые вполне себе работают, но т.к. они сделаны сильно опытными товарищами мне, как человеку, для которого программирование это хобби, они совсем не понятны. Следовательно как-то переделать их под мою задачу пока не получается.
В итоге снова решил попросить помощи на этом форуме, где опытные товарищи сильно помогают мало опытным коллегам разобраться в теме (за что им большое спасибо!).
К теме приложен примерный файл XML. Он имеет достаточно ветвистую, но в целом понятную (как мне пока кажется), структуру.
Можно как-то совсем по простому (понимаю, что с т.з. опытных программистов это не правильно, но наверняка есть более понятные простым пользователям варианты, чем те, которые находятся в интернете) кодом создавать ветки/подветки и вставлять в них данные из Экселя?
Например, у меня в ячейке А1 стоит "Закрытое акционерное общество «ХХХ»", в ячейке B1 - "1027700000000" и в C1 - "6164070000. Как мне вставить эти данные в XML файл в нужные поля раздела "<Pledgors>"? Ну а дальше я уже сам должен разобраться.
Заранее спасибо!
С помощью пользователей данного форума победил задачу по импорту данных из XML в Excel.
Теперь хочется победить и обратную задачу по созданию XML файла из Excel.
Перечитал кучу статей и форумов, найденных с помощью Яндекса, слазил даже к иностранцам. Нашел массу примеров, которые вполне себе работают, но т.к. они сделаны сильно опытными товарищами мне, как человеку, для которого программирование это хобби, они совсем не понятны. Следовательно как-то переделать их под мою задачу пока не получается.
В итоге снова решил попросить помощи на этом форуме, где опытные товарищи сильно помогают мало опытным коллегам разобраться в теме (за что им большое спасибо!).
К теме приложен примерный файл XML. Он имеет достаточно ветвистую, но в целом понятную (как мне пока кажется), структуру.
Можно как-то совсем по простому (понимаю, что с т.з. опытных программистов это не правильно, но наверняка есть более понятные простым пользователям варианты, чем те, которые находятся в интернете) кодом создавать ветки/подветки и вставлять в них данные из Экселя?
Например, у меня в ячейке А1 стоит "Закрытое акционерное общество «ХХХ»", в ячейке B1 - "1027700000000" и в C1 - "6164070000. Как мне вставить эти данные в XML файл в нужные поля раздела "<Pledgors>"? Ну а дальше я уже сам должен разобраться.
Sub Просто() Set xmlDoc = CreateObject("Microsoft.XMLDOM") Set objNode = xmlDoc.createProcessingInstruction( _ "xml", "version=""1.0"" encoding=""utf-8""") Set objNode = xmlDoc.InsertBefore(objNode, xmlDoc.ChildNodes.Item(0)) 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 FormUI1 = xmlDoc.createElement("FormUI1") NotificationData.appendChild FormUI1 Set Pledgors = xmlDoc.createElement("Pledgors") FormUI1.appendChild Pledgors ' Вот и добрались до Pledgor Set Pledgor = xmlDoc.createElement("Pledgor") Pledgors.appendChild Pledgor Set Organization = xmlDoc.createElement("Organization") Pledgor.appendChild Organization Set RussianOrganization = xmlDoc.createElement("RussianOrganization") Organization.appendChild RussianOrganization Set NameFull = xmlDoc.createElement("NameFull") NameFull.Text = "Закрытое акционерное общество «ХХХ»" RussianOrganization.appendChild NameFull Set OGRN = xmlDoc.createElement("OGRN") OGRN.Text = "1027700000000" RussianOrganization.appendChild OGRN Set INN = xmlDoc.createElement("INN") INN.Text = "6164070000" RussianOrganization.appendChild INN End Sub
Sub Просто() Set xmlDoc = CreateObject("Microsoft.XMLDOM") Set objNode = xmlDoc.createProcessingInstruction( _ "xml", "version=""1.0"" encoding=""utf-8""") Set objNode = xmlDoc.InsertBefore(objNode, xmlDoc.ChildNodes.Item(0)) 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 FormUI1 = xmlDoc.createElement("FormUI1") NotificationData.appendChild FormUI1 Set Pledgors = xmlDoc.createElement("Pledgors") FormUI1.appendChild Pledgors ' Вот и добрались до Pledgor Set Pledgor = xmlDoc.createElement("Pledgor") Pledgors.appendChild Pledgor Set Organization = xmlDoc.createElement("Organization") Pledgor.appendChild Organization Set RussianOrganization = xmlDoc.createElement("RussianOrganization") Organization.appendChild RussianOrganization Set NameFull = xmlDoc.createElement("NameFull") NameFull.Text = "Закрытое акционерное общество «ХХХ»" RussianOrganization.appendChild NameFull Set OGRN = xmlDoc.createElement("OGRN") OGRN.Text = "1027700000000" RussianOrganization.appendChild OGRN Set INN = xmlDoc.createElement("INN") INN.Text = "6164070000" RussianOrganization.appendChild INN End Sub
doober, а в какое место вашего первого кода нужно вставить данную строчку? И насколько я понимаю ее нужно как-то по другому написать, чтобы она заработала?
Прошерстил интернет, нашел такой способ
Вставил в код перед сохранение такую строчку [vba]
Код
Indent xmldoc, vbCrLf
[/vba]
И добавил такой код, найденный на одном из форумов [vba]
Код
Private Sub Indent(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 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 Indent child, levelIndent & " " End If Set child = child.NextSibling Loop End Sub
[/vba]
В принципе все работает как надо, но разве как-то попроще нельзя?
doober, а в какое место вашего первого кода нужно вставить данную строчку? И насколько я понимаю ее нужно как-то по другому написать, чтобы она заработала?
Прошерстил интернет, нашел такой способ
Вставил в код перед сохранение такую строчку [vba]
Код
Indent xmldoc, vbCrLf
[/vba]
И добавил такой код, найденный на одном из форумов [vba]
Код
Private Sub Indent(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 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 Indent child, levelIndent & " " End If Set child = child.NextSibling Loop End Sub
[/vba]
В принципе все работает как надо, но разве как-то попроще нельзя?Beerukoff
Сообщение отредактировал Beerukoff - Среда, 28.12.2016, 17:58
И еще один небольшой вопрос. В файлах, на которых я учился импорту XML в Excel, в начале (второй строкой) была надпись-комментарий типа такой
<!-- generated by eNot v5.8.1524 -->
Как можно такую же вставлять (хочу туда версию конвертера вставлять, что для тестирования потом пригодится)? Учитывая, что она в дерево не должна входить
И еще один небольшой вопрос. В файлах, на которых я учился импорту XML в Excel, в начале (второй строкой) была надпись-комментарий типа такой
<!-- generated by eNot v5.8.1524 -->
Как можно такую же вставлять (хочу туда версию конвертера вставлять, что для тестирования потом пригодится)? Учитывая, что она в дерево не должна входитьBeerukoff
Подскажите пжл как можно выделить формирование веток в отдельную Private Sub? Чтобы можно было сделать отдельную процедуру по генерации веток и подветок
Что в основном Sub'е осталось это [vba]
Код
Set xmlDoc = CreateObject("Microsoft.XMLDOM") Set objNode = xmlDoc.createProcessingInstruction( _ "xml", "version=""1.0"" encoding=""utf-8""") Set objNode = xmlDoc.InsertBefore(objNode, xmlDoc.ChildNodes.Item(0)) 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
[/vba]
А в PrivateSub'е было только типа такого [vba]
Код
Set FormUI1 = xmlDoc.createElement("FormUI1") NotificationData.appendChild FormUI1
[/vba]
И еще один вопрос как можно в этом коде заменить NotificationData на переменную? [vba]
Код
Set FormUI1 = xmlDoc.createElement("FormUI1") NotificationData.appendChild FormUI1
[/vba]
Подскажите пжл как можно выделить формирование веток в отдельную Private Sub? Чтобы можно было сделать отдельную процедуру по генерации веток и подветок
Что в основном Sub'е осталось это [vba]
Код
Set xmlDoc = CreateObject("Microsoft.XMLDOM") Set objNode = xmlDoc.createProcessingInstruction( _ "xml", "version=""1.0"" encoding=""utf-8""") Set objNode = xmlDoc.InsertBefore(objNode, xmlDoc.ChildNodes.Item(0)) 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
[/vba]
А в PrivateSub'е было только типа такого [vba]
Код
Set FormUI1 = xmlDoc.createElement("FormUI1") NotificationData.appendChild FormUI1
[/vba]
И еще один вопрос как можно в этом коде заменить NotificationData на переменную? [vba]
Код
Set FormUI1 = xmlDoc.createElement("FormUI1") NotificationData.appendChild FormUI1