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

Вход

Регистрация

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

 

= Мир MS Excel/Добавление схемы в файл xml при импорте данных из Excel - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавление схемы в файл xml при импорте данных из Excel (Макросы/Sub)
Добавление схемы в файл xml при импорте данных из Excel
Sergik Дата: Пятница, 07.12.2018, 16:05 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Добрый день.
Мне необходимо экспортировать данные с р/л Excel в <файл.xml> с предопределенной структурой. Макрос для экспорта самих данных у меня получился.
Однако, проблемой оказалось добавление в начало <файла.xml> схемы XML. Поиск по "И-Нету" успехом не увенчался...
Подскажите, как макросом дописать схему XML в итоговый файл?
Пример итогового <файла.xml> прилагаю, именно такой блок строк (<xs:schema ... </xs:schema>) надо автоматически формировать при создании файла .xml ...
К сообщению приложен файл: 3451626.xml(1.0 Kb)
 
Ответить
СообщениеДобрый день.
Мне необходимо экспортировать данные с р/л Excel в <файл.xml> с предопределенной структурой. Макрос для экспорта самих данных у меня получился.
Однако, проблемой оказалось добавление в начало <файла.xml> схемы XML. Поиск по "И-Нету" успехом не увенчался...
Подскажите, как макросом дописать схему XML в итоговый файл?
Пример итогового <файла.xml> прилагаю, именно такой блок строк (<xs:schema ... </xs:schema>) надо автоматически формировать при создании файла .xml ...

Автор - Sergik
Дата добавления - 07.12.2018 в 16:05
doober Дата: Пятница, 07.12.2018, 17:19 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 512
Репутация: 231 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте.
Макрос для экспорта самих данных у меня получился
Где этот макрос, в нем я могу дописать часть кода для вставки схемы


 
Ответить
СообщениеЗдравствуйте.
Макрос для экспорта самих данных у меня получился
Где этот макрос, в нем я могу дописать часть кода для вставки схемы

Автор - doober
Дата добавления - 07.12.2018 в 17:19
Sergik Дата: Пятница, 07.12.2018, 17:39 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
[vba]
Код

Sub Export()
  Dim I As Integer                          ' TMP
  Dim cRow As Integer                    ' current row
' -------------------------------------------------
  Sheets("Orders").Select
  xml_File = ActiveWorkbook.Path & "\Test.xml"
  Set xml_Obj = CreateObject("MSXML2.DOMDocument")
  xml_Obj.appendChild xml_Obj.createProcessingInstruction("xml", "version='1.0' standalone='yes'")
  Set Data_Set = xml_Obj.createElement("NewDataSet")
  xml_Obj.appendChild (Data_Set)
' -------------------------------------------------
' тут будет схема XML..?
' -------------------------------------------------
  cRow = 3
  Do While Not IsEmpty(Cells(cRow, 1))
' --------
    Set createHeader = xml_Obj.createElement("OrderHeader")
'   add
    createHeader.appendChild(xml_Obj.createElement("Id")).Text = "Test id"
    createHeader.appendChild(xml_Obj.createElement("Cl")).Text = "Test cl"
    Data_Set.appendChild createHeader
    cRow = cRow + 1
' --------
  Loop
' отступы
  SetShiftToXML xml_Obj
  xml_Obj.Save xml_File
' -------------------------------------------------
  MsgBox "Export complete!"
End Sub

Sub SetShiftToXML(ByRef xml As Variant)
' отступы
' -------------------------------------------------
    Set xsl = CreateObject("MSXML2.DOMDocument")
    
    xsl.LoadXML ("<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>" & vbCrLf & _
    "<xsl:output method='xml' version='1.0' encoding='UTF-8' indent='yes'/>" & vbCrLf & _
    "<xsl:template match='@*|node()'>" & vbCrLf & _
    "<xsl:copy>" & vbCrLf & _
    "<xsl:apply-templates select='@*|node()' />" & vbCrLf & _
    "</xsl:copy>" & vbCrLf & _
    "</xsl:template>" & vbCrLf & _
    "</xsl:stylesheet>")
    
    xml.transformNodeToObject xsl, xml
' -------------------------------------------------
End Sub
[/vba]
 
Ответить
Сообщение[vba]
Код

Sub Export()
  Dim I As Integer                          ' TMP
  Dim cRow As Integer                    ' current row
' -------------------------------------------------
  Sheets("Orders").Select
  xml_File = ActiveWorkbook.Path & "\Test.xml"
  Set xml_Obj = CreateObject("MSXML2.DOMDocument")
  xml_Obj.appendChild xml_Obj.createProcessingInstruction("xml", "version='1.0' standalone='yes'")
  Set Data_Set = xml_Obj.createElement("NewDataSet")
  xml_Obj.appendChild (Data_Set)
' -------------------------------------------------
' тут будет схема XML..?
' -------------------------------------------------
  cRow = 3
  Do While Not IsEmpty(Cells(cRow, 1))
' --------
    Set createHeader = xml_Obj.createElement("OrderHeader")
'   add
    createHeader.appendChild(xml_Obj.createElement("Id")).Text = "Test id"
    createHeader.appendChild(xml_Obj.createElement("Cl")).Text = "Test cl"
    Data_Set.appendChild createHeader
    cRow = cRow + 1
' --------
  Loop
' отступы
  SetShiftToXML xml_Obj
  xml_Obj.Save xml_File
' -------------------------------------------------
  MsgBox "Export complete!"
End Sub

Sub SetShiftToXML(ByRef xml As Variant)
' отступы
' -------------------------------------------------
    Set xsl = CreateObject("MSXML2.DOMDocument")
    
    xsl.LoadXML ("<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>" & vbCrLf & _
    "<xsl:output method='xml' version='1.0' encoding='UTF-8' indent='yes'/>" & vbCrLf & _
    "<xsl:template match='@*|node()'>" & vbCrLf & _
    "<xsl:copy>" & vbCrLf & _
    "<xsl:apply-templates select='@*|node()' />" & vbCrLf & _
    "</xsl:copy>" & vbCrLf & _
    "</xsl:template>" & vbCrLf & _
    "</xsl:stylesheet>")
    
    xml.transformNodeToObject xsl, xml
' -------------------------------------------------
End Sub
[/vba]

Автор - Sergik
Дата добавления - 07.12.2018 в 17:39
doober Дата: Пятница, 07.12.2018, 21:00 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 512
Репутация: 231 ±
Замечаний: 0% ±

Excel 2007
Тогда так.




Сообщение отредактировал doober - Пятница, 07.12.2018, 21:00
 
Ответить
СообщениеТогда так.

Автор - doober
Дата добавления - 07.12.2018 в 21:00
Sergik Дата: Понедельник, 10.12.2018, 17:00 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
doober,
в лоб не получается, система выдает ошибку: "Invalid procedure call or argument"
на строку:
xml.transformNodeToObject xsl, xml

Мы ожидаем, что процедура, добавляющая отступы, выгрузит в файл схему?
 
Ответить
Сообщениеdoober,
в лоб не получается, система выдает ошибку: "Invalid procedure call or argument"
на строку:
xml.transformNodeToObject xsl, xml

Мы ожидаем, что процедура, добавляющая отступы, выгрузит в файл схему?

Автор - Sergik
Дата добавления - 10.12.2018 в 17:00
doober Дата: Понедельник, 10.12.2018, 22:39 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 512
Репутация: 231 ±
Замечаний: 0% ±

Excel 2007
xml.transformNodeToObject xsl, xml

А где Вы увидели эту строку в моем коде?
Не обратил внимания и не убрал мусор в вашем коде




Сообщение отредактировал doober - Понедельник, 10.12.2018, 22:40
 
Ответить
Сообщение
xml.transformNodeToObject xsl, xml

А где Вы увидели эту строку в моем коде?
Не обратил внимания и не убрал мусор в вашем коде

Автор - doober
Дата добавления - 10.12.2018 в 22:39
Sergik Дата: Вторник, 11.12.2018, 15:24 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
doober,
спасибо за подсказку, почти получилось
Процедура теперь выглядит так:



Файл xml, генерируемый процедурой прилагаю. В нем осталась одна неточность.
вместо 4-х строк:
<xs:element name="Id" type="xs:string" minOccurs="0">
</xs:element>
<xs:element name="Cl" type="xs:string" minOccurs="0">
</xs:element>
надо сгенерить 2 строки:
<xs:element name="Id" type="xs:string" minOccurs="0" />
<xs:element name="Cl" type="xs:string" minOccurs="0" />
Подскажете, как это можно сделать?
К сообщению приложен файл: Test.xml(0.9 Kb)
 
Ответить
Сообщениеdoober,
спасибо за подсказку, почти получилось
Процедура теперь выглядит так:



Файл xml, генерируемый процедурой прилагаю. В нем осталась одна неточность.
вместо 4-х строк:
<xs:element name="Id" type="xs:string" minOccurs="0">
</xs:element>
<xs:element name="Cl" type="xs:string" minOccurs="0">
</xs:element>
надо сгенерить 2 строки:
<xs:element name="Id" type="xs:string" minOccurs="0" />
<xs:element name="Cl" type="xs:string" minOccurs="0" />
Подскажете, как это можно сделать?

Автор - Sergik
Дата добавления - 11.12.2018 в 15:24
doober Дата: Вторник, 11.12.2018, 17:24 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 512
Репутация: 231 ±
Замечаний: 0% ±

Excel 2007
Вам шашечки или ехать?
Уберите форматирование по стилю и будет счастье.


 
Ответить
СообщениеВам шашечки или ехать?
Уберите форматирование по стилю и будет счастье.

Автор - doober
Дата добавления - 11.12.2018 в 17:24
Sergik Дата: Среда, 12.12.2018, 08:58 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
doober,
мне и шашечки и ехать, и про форматирование я уже понял
однако, если либо-либо, то мне интересно, как сгенерили тот xml файл, что я выложил самым первым: 3451626.xml - в нем и структура и формат вполне себе уживаются
Что скажете?
 
Ответить
Сообщениеdoober,
мне и шашечки и ехать, и про форматирование я уже понял
однако, если либо-либо, то мне интересно, как сгенерили тот xml файл, что я выложил самым первым: 3451626.xml - в нем и структура и формат вполне себе уживаются
Что скажете?

Автор - Sergik
Дата добавления - 12.12.2018 в 08:58
doober Дата: Среда, 12.12.2018, 12:49 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 512
Репутация: 231 ±
Замечаний: 0% ±

Excel 2007
Попробуйте поиграться с отступами
[vba]
Код
Set BlankNode = xml_Obj.createTextNode("elementBlank")
    BlankNode.Text = vbNewLine & "  "
    createHeader.appendChild BlankNode
[/vba]


 
Ответить
СообщениеПопробуйте поиграться с отступами
[vba]
Код
Set BlankNode = xml_Obj.createTextNode("elementBlank")
    BlankNode.Text = vbNewLine & "  "
    createHeader.appendChild BlankNode
[/vba]

Автор - doober
Дата добавления - 12.12.2018 в 12:49
Sergik Дата: Пятница, 14.12.2018, 17:12 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
doober,
в итоге удалось получить <файл.ml> требуемой структуры, хотя бы и в "ручном" режиме...
спасибо за помощь!
 
Ответить
Сообщениеdoober,
в итоге удалось получить <файл.ml> требуемой структуры, хотя бы и в "ручном" режиме...
спасибо за помощь!

Автор - Sergik
Дата добавления - 14.12.2018 в 17:12
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавление схемы в файл xml при импорте данных из Excel (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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