Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Создание XML на основе данных из Excel - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создание XML на основе данных из Excel (Макросы/Sub)
Создание XML на основе данных из Excel
Beerukoff Дата: Среда, 28.12.2016, 10:01 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
С помощью пользователей данного форума победил задачу по импорту данных из XML в Excel.

Теперь хочется победить и обратную задачу по созданию XML файла из Excel.

Перечитал кучу статей и форумов, найденных с помощью Яндекса, слазил даже к иностранцам. Нашел массу примеров, которые вполне себе работают, но т.к. они сделаны сильно опытными товарищами мне, как человеку, для которого программирование это хобби, они совсем не понятны. Следовательно как-то переделать их под мою задачу пока не получается.

В итоге снова решил попросить помощи на этом форуме, где опытные товарищи сильно помогают мало опытным коллегам разобраться в теме (за что им большое спасибо!).

К теме приложен примерный файл XML. Он имеет достаточно ветвистую, но в целом понятную (как мне пока кажется), структуру.

Можно как-то совсем по простому (понимаю, что с т.з. опытных программистов это не правильно, но наверняка есть более понятные простым пользователям варианты, чем те, которые находятся в интернете) кодом создавать ветки/подветки и вставлять в них данные из Экселя?

Например, у меня в ячейке А1 стоит "Закрытое акционерное общество «ХХХ»", в ячейке B1 - "1027700000000" и в C1 - "6164070000. Как мне вставить эти данные в XML файл в нужные поля раздела "<Pledgors>"? Ну а дальше я уже сам должен разобраться.

Заранее спасибо!
К сообщению приложен файл: --20.12.2016.xml (4.5 Kb)


Сообщение отредактировал Beerukoff - Среда, 28.12.2016, 10:08
 
Ответить
СообщениеС помощью пользователей данного форума победил задачу по импорту данных из XML в Excel.

Теперь хочется победить и обратную задачу по созданию XML файла из Excel.

Перечитал кучу статей и форумов, найденных с помощью Яндекса, слазил даже к иностранцам. Нашел массу примеров, которые вполне себе работают, но т.к. они сделаны сильно опытными товарищами мне, как человеку, для которого программирование это хобби, они совсем не понятны. Следовательно как-то переделать их под мою задачу пока не получается.

В итоге снова решил попросить помощи на этом форуме, где опытные товарищи сильно помогают мало опытным коллегам разобраться в теме (за что им большое спасибо!).

К теме приложен примерный файл XML. Он имеет достаточно ветвистую, но в целом понятную (как мне пока кажется), структуру.

Можно как-то совсем по простому (понимаю, что с т.з. опытных программистов это не правильно, но наверняка есть более понятные простым пользователям варианты, чем те, которые находятся в интернете) кодом создавать ветки/подветки и вставлять в них данные из Экселя?

Например, у меня в ячейке А1 стоит "Закрытое акционерное общество «ХХХ»", в ячейке B1 - "1027700000000" и в C1 - "6164070000. Как мне вставить эти данные в XML файл в нужные поля раздела "<Pledgors>"? Ну а дальше я уже сам должен разобраться.

Заранее спасибо!

Автор - Beerukoff
Дата добавления - 28.12.2016 в 10:01
doober Дата: Среда, 28.12.2016, 13:38 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Можно как-то совсем по простому
Можно очень просто добраться.


 
Ответить
Сообщение
Можно как-то совсем по простому
Можно очень просто добраться.

Автор - doober
Дата добавления - 28.12.2016 в 13:38
Beerukoff Дата: Среда, 28.12.2016, 16:07 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
doober, Спасибо огромное!

Добавил в конец
[vba]
Код

strFilePath = ThisWorkBook.Path & "\Test.xml"
xmldoc.Save strFilePath
[/vba]
xml файл создался.

Есть один вопрос, как можно для наглядности файла вставить перенос строк после каждой строки? А то сейчас макрос весь текст в одну строку записал.


 
Ответить
Сообщениеdoober, Спасибо огромное!

Добавил в конец
[vba]
Код

strFilePath = ThisWorkBook.Path & "\Test.xml"
xmldoc.Save strFilePath
[/vba]
xml файл создался.

Есть один вопрос, как можно для наглядности файла вставить перенос строк после каждой строки? А то сейчас макрос весь текст в одну строку записал.



Автор - Beerukoff
Дата добавления - 28.12.2016 в 16:07
doober Дата: Среда, 28.12.2016, 17:13 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
вставить перенос строк после каждой строки

Можно так[vba]
Код
        node.insertBefore _
                node.ownerDocument.createTextNode(vbCrLf), _
                node.firstChild    
[/vba]


 
Ответить
Сообщение
вставить перенос строк после каждой строки

Можно так[vba]
Код
        node.insertBefore _
                node.ownerDocument.createTextNode(vbCrLf), _
                node.firstChild    
[/vba]

Автор - doober
Дата добавления - 28.12.2016 в 17:13
Beerukoff Дата: Среда, 28.12.2016, 17:52 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
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 - Среда, 28.12.2016, 17:58
 
Ответить
Сообщение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
Дата добавления - 28.12.2016 в 17:52
Beerukoff Дата: Среда, 28.12.2016, 18:12 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
И еще один небольшой вопрос. В файлах, на которых я учился импорту XML в Excel, в начале (второй строкой) была надпись-комментарий типа такой

<!-- generated by eNot v5.8.1524 -->

Как можно такую же вставлять (хочу туда версию конвертера вставлять, что для тестирования потом пригодится)? Учитывая, что она в дерево не должна входить
 
Ответить
СообщениеИ еще один небольшой вопрос. В файлах, на которых я учился импорту XML в Excel, в начале (второй строкой) была надпись-комментарий типа такой

<!-- generated by eNot v5.8.1524 -->

Как можно такую же вставлять (хочу туда версию конвертера вставлять, что для тестирования потом пригодится)? Учитывая, что она в дерево не должна входить

Автор - Beerukoff
Дата добавления - 28.12.2016 в 18:12
doober Дата: Среда, 28.12.2016, 22:07 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
А гугл поюзать?
первая ссылка.
[vba]
Код
    
    PledgeNotificationToNotary.appendChild NotificationData
    '<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>
    Set Comments = xmlDoc.createComment("Вставкакоммента")
    PledgeNotificationToNotary.InsertBefore Comments, NotificationData
  '<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>
    Set FormUI1 = xmlDoc.createElement("FormUI1")
[/vba]


 
Ответить
СообщениеА гугл поюзать?
первая ссылка.
[vba]
Код
    
    PledgeNotificationToNotary.appendChild NotificationData
    '<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>
    Set Comments = xmlDoc.createComment("Вставкакоммента")
    PledgeNotificationToNotary.InsertBefore Comments, NotificationData
  '<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>
    Set FormUI1 = xmlDoc.createElement("FormUI1")
[/vba]

Автор - doober
Дата добавления - 28.12.2016 в 22:07
Beerukoff Дата: Среда, 28.12.2016, 22:17 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
doober, еще раз спасибо!

Я искал в Яндексе и Гугле, но строка поиска была «vba xml вставать комментарии», там столько ерунды нашлось, а полезного ничего
 
Ответить
Сообщениеdoober, еще раз спасибо!

Я искал в Яндексе и Гугле, но строка поиска была «vba xml вставать комментарии», там столько ерунды нашлось, а полезного ничего

Автор - Beerukoff
Дата добавления - 28.12.2016 в 22:17
Beerukoff Дата: Четверг, 29.12.2016, 18:23 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Подскажите пжл как можно выделить формирование веток в отдельную 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]


Сообщение отредактировал Beerukoff - Четверг, 29.12.2016, 18:27
 
Ответить
СообщениеПодскажите пжл как можно выделить формирование веток в отдельную 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]

Автор - Beerukoff
Дата добавления - 29.12.2016 в 18:23
Beerukoff Дата: Пятница, 30.12.2016, 16:39 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Поясню. Идея в следующем.

На листе Экселя (файл приложен) представлено дерево, чем левее, тем глубже подветка (т.е. в колонке B представлены подветки для ветки А и т.д.).

Как на основе этого создать XML файл с указанной структурой?

Вручную (ветка за веткой) у меня все получается, но хочется создать цикл, которой пробегался бы по строчкам ветки и сам создавал дерево.

Яндекс с Гуглом мучил, но ничего понятного мне не нашел.

Помогите пжл волшебным пенделем
К сообщению приложен файл: 9436342.xlsx (9.4 Kb)
 
Ответить
СообщениеПоясню. Идея в следующем.

На листе Экселя (файл приложен) представлено дерево, чем левее, тем глубже подветка (т.е. в колонке B представлены подветки для ветки А и т.д.).

Как на основе этого создать XML файл с указанной структурой?

Вручную (ветка за веткой) у меня все получается, но хочется создать цикл, которой пробегался бы по строчкам ветки и сам создавал дерево.

Яндекс с Гуглом мучил, но ничего понятного мне не нашел.

Помогите пжл волшебным пенделем

Автор - Beerukoff
Дата добавления - 30.12.2016 в 16:39
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создание XML на основе данных из Excel (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!