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

Вход

Регистрация

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

 

= Мир MS Excel/Преобразование XLS → XML средствами VBA - Мир MS Excel

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

Excel 2010
Есть макрос и функция на планете ексель Преобразование массива в XML (экспорт таблицы в файл XML)
http://excelvba.ru/code/Array2XML#comment-3316
Макрос:
[vba]
Код
Sub XMLExport()
      Dim Заголовок As Range, Данные As Range
      Set Заголовок = Range("a1:f1")
      Set Данные = Range([A2], Range("A" & Rows.Count).End(xlUp)).Resize(, Заголовок.Columns.Count)

      arrHeaders = Application.Transpose(Application.Transpose(Заголовок.Value))
      ПутьКФайлуXML = ThisWorkbook.Path & "\result.xml"

      ' формируем DOMDocument, и сохраняем XML в файл result.xml
     Array2XML(Данные.Value, arrHeaders, "Root").Save ПутьКФайлуXML

      If Err = 0 Then MsgBox "Создан XML файл" & vbNewLine & ПутьКФайлуXML, vbInformation, "Готово"
End Sub
[/vba]
Функция:
[vba]
Код
Function Array2XML(ByVal arrData, ByVal arrHeaders, ByVal strHeading$) As DOMDocument
      ' получает в качестве параметров:
     ' двумерный массив arrData с данными для выгрузки,
     ' одномерный массив arrHeaders, содержащий заголовки столбцов,
     ' и strHeading$ - XML-константу объекта
     Dim xmlDoc As DOMDocument, xmlFields As IXMLDOMElement, xmlField As IXMLDOMElement
      Set xmlDoc = CreateObject("Microsoft.XMLDOM")  ' создаём новый DOMDocument

      DataColumnsCount% = UBound(arrData, 2) - LBound(arrData, 2) + 1
      HeadersCount% = UBound(arrHeaders) - LBound(arrHeaders) + 1
      If DataColumnsCount% <> HeadersCount% Then MsgBox "Количество заголовков в массиве arrHeaders" & _
         "не соответствует количеству столбцов массива", vbCritical, "Ошибка создания XML": End

      xmlDoc.loadXML Replace("<" + strHeading + "/>", " ", "_")    ' записываем XML-константу объекта

      For i = LBound(arrData) To UBound(arrData)
          ' создание нового узла
         Set xmlFields = xmlDoc.documentElement.appendChild(xmlDoc.createElement("Row"))

          For j = LBound(arrHeaders) To UBound(arrHeaders)    ' добавление полей в узел
             Set xmlField = xmlFields.appendChild(xmlDoc.createElement(Replace(arrHeaders(j), " ", "_")))
              xmlField.Text = arrData(i, j + LBound(arrData, 2) - LBound(arrHeaders))
          Next j
      Next i

      Set Array2XML = xmlDoc
End Function
[/vba]

Функция позволяет создавать Xml из таблицы, верхняя строка которой является заголовком

Подскажите пожалуйста можно ли реализовать данный метод так, чтобы на основании таблицы создавать ХML, но с подзаголовками в несколько уровней?

Например:
1 Уровень <ФайлПФР>
..2 Уровень <ИмяФайла>...</ИмяФайла>
..2 Уровень <ЗаголовокФайла>...</ЗаголовокФайла>
..2 Уровень <ПачкаВходящихДокументов.ДоставочнаяОрганизация="БАНК">
.....3 Уровень <ВХОДЯЩАЯ.ОПИСЬ>...</ВХОДЯЩАЯ.ОПИСЬ>
.....3 Уровень <СПИСОК.НА.ЗАЧИСЛЕНИЕ>
.......4 Уровень <НомерВпачке>2</НомерВпачке>
.......4 Уровень <СведенияОполучателе>
..........5 Уровень <НомерВмассиве>1</НомерВмассиве>
..........5 Уровень <НомерВыплатногоДела>930158</НомерВыплатногоДела>
..........5 Уровень <КодРайона>016-001-000</КодРайона>
..........5 Уровень <СтраховойНомер>123-456-789.45</СтраховойНомер>
..........6 Уровень <ФИО>
.............7 Уровень <Фамилия>ИВАНОВ</Фамилия>
.............7 Уровень <Имя>ИВАН</Имя>
.............7 Уровень <Отчество>ИВАНОВИЧ</Отчество>

Спасибо за помощь и внимание !


Сообщение отредактировал Валерьянка - Понедельник, 24.03.2014, 17:55
 
Ответить
СообщениеЕсть макрос и функция на планете ексель Преобразование массива в XML (экспорт таблицы в файл XML)
http://excelvba.ru/code/Array2XML#comment-3316
Макрос:
[vba]
Код
Sub XMLExport()
      Dim Заголовок As Range, Данные As Range
      Set Заголовок = Range("a1:f1")
      Set Данные = Range([A2], Range("A" & Rows.Count).End(xlUp)).Resize(, Заголовок.Columns.Count)

      arrHeaders = Application.Transpose(Application.Transpose(Заголовок.Value))
      ПутьКФайлуXML = ThisWorkbook.Path & "\result.xml"

      ' формируем DOMDocument, и сохраняем XML в файл result.xml
     Array2XML(Данные.Value, arrHeaders, "Root").Save ПутьКФайлуXML

      If Err = 0 Then MsgBox "Создан XML файл" & vbNewLine & ПутьКФайлуXML, vbInformation, "Готово"
End Sub
[/vba]
Функция:
[vba]
Код
Function Array2XML(ByVal arrData, ByVal arrHeaders, ByVal strHeading$) As DOMDocument
      ' получает в качестве параметров:
     ' двумерный массив arrData с данными для выгрузки,
     ' одномерный массив arrHeaders, содержащий заголовки столбцов,
     ' и strHeading$ - XML-константу объекта
     Dim xmlDoc As DOMDocument, xmlFields As IXMLDOMElement, xmlField As IXMLDOMElement
      Set xmlDoc = CreateObject("Microsoft.XMLDOM")  ' создаём новый DOMDocument

      DataColumnsCount% = UBound(arrData, 2) - LBound(arrData, 2) + 1
      HeadersCount% = UBound(arrHeaders) - LBound(arrHeaders) + 1
      If DataColumnsCount% <> HeadersCount% Then MsgBox "Количество заголовков в массиве arrHeaders" & _
         "не соответствует количеству столбцов массива", vbCritical, "Ошибка создания XML": End

      xmlDoc.loadXML Replace("<" + strHeading + "/>", " ", "_")    ' записываем XML-константу объекта

      For i = LBound(arrData) To UBound(arrData)
          ' создание нового узла
         Set xmlFields = xmlDoc.documentElement.appendChild(xmlDoc.createElement("Row"))

          For j = LBound(arrHeaders) To UBound(arrHeaders)    ' добавление полей в узел
             Set xmlField = xmlFields.appendChild(xmlDoc.createElement(Replace(arrHeaders(j), " ", "_")))
              xmlField.Text = arrData(i, j + LBound(arrData, 2) - LBound(arrHeaders))
          Next j
      Next i

      Set Array2XML = xmlDoc
End Function
[/vba]

Функция позволяет создавать Xml из таблицы, верхняя строка которой является заголовком

Подскажите пожалуйста можно ли реализовать данный метод так, чтобы на основании таблицы создавать ХML, но с подзаголовками в несколько уровней?

Например:
1 Уровень <ФайлПФР>
..2 Уровень <ИмяФайла>...</ИмяФайла>
..2 Уровень <ЗаголовокФайла>...</ЗаголовокФайла>
..2 Уровень <ПачкаВходящихДокументов.ДоставочнаяОрганизация="БАНК">
.....3 Уровень <ВХОДЯЩАЯ.ОПИСЬ>...</ВХОДЯЩАЯ.ОПИСЬ>
.....3 Уровень <СПИСОК.НА.ЗАЧИСЛЕНИЕ>
.......4 Уровень <НомерВпачке>2</НомерВпачке>
.......4 Уровень <СведенияОполучателе>
..........5 Уровень <НомерВмассиве>1</НомерВмассиве>
..........5 Уровень <НомерВыплатногоДела>930158</НомерВыплатногоДела>
..........5 Уровень <КодРайона>016-001-000</КодРайона>
..........5 Уровень <СтраховойНомер>123-456-789.45</СтраховойНомер>
..........6 Уровень <ФИО>
.............7 Уровень <Фамилия>ИВАНОВ</Фамилия>
.............7 Уровень <Имя>ИВАН</Имя>
.............7 Уровень <Отчество>ИВАНОВИЧ</Отчество>

Спасибо за помощь и внимание !

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

Excel 2010
Цитата
Подскажите пожалуйста можно ли реализовать данный метод так, чтобы на основании таблицы создавать ХML, но с подзаголовками в несколько уровней?

Можно.
2 варианта.
1. Под конкретную схему документа пишете конкретнй макрос,либо толково ее надо расписать
в макросе и данные на листе правильно расположить.
2.Данные на листе с группировкой.тогда по уровням группивровки можно получить вложение полей.


 
Ответить
Сообщение
Цитата
Подскажите пожалуйста можно ли реализовать данный метод так, чтобы на основании таблицы создавать ХML, но с подзаголовками в несколько уровней?

Можно.
2 варианта.
1. Под конкретную схему документа пишете конкретнй макрос,либо толково ее надо расписать
в макросе и данные на листе правильно расположить.
2.Данные на листе с группировкой.тогда по уровням группивровки можно получить вложение полей.

Автор - doober
Дата добавления - 24.03.2014 в 17:52
Валерьянка Дата: Вторник, 25.03.2014, 15:37 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
Если по первому варианту, т.е. макросом
как вписать, то что первые 6 строк это заголовки
файлик тут
К сообщению приложен файл: xmled.xlsm (23.8 Kb)
 
Ответить
СообщениеЕсли по первому варианту, т.е. макросом
как вписать, то что первые 6 строк это заголовки
файлик тут

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

Excel 2010
Таблица не правильная.
Попробуйте разобраться со структурой файла XML в общем и в частности, конкретно с вашим.
Цитата
.2 Уровень <ПачкаВходящихДокументов.ДоставочнаяОрганизация="БАНК">

Точки не допускаюся,там пробел должен быть,ДоставочнаяОрганизация-это атрибут нода ПачкаВходящихДокументов
Эта строка меня сильно смущает,так не может быть
файл схемы xsd вашего файла где?
Пришлось горе идти к вам,во вложении схема вашего файла xml из другой темы
Посмотрите здесь,там есть полезная информация для вас
К сообщению приложен файл: .1.rar (97.8 Kb)


 
Ответить
СообщениеТаблица не правильная.
Попробуйте разобраться со структурой файла XML в общем и в частности, конкретно с вашим.
Цитата
.2 Уровень <ПачкаВходящихДокументов.ДоставочнаяОрганизация="БАНК">

Точки не допускаюся,там пробел должен быть,ДоставочнаяОрганизация-это атрибут нода ПачкаВходящихДокументов
Эта строка меня сильно смущает,так не может быть
файл схемы xsd вашего файла где?
Пришлось горе идти к вам,во вложении схема вашего файла xml из другой темы
Посмотрите здесь,там есть полезная информация для вас

Автор - doober
Дата добавления - 25.03.2014 в 17:14
Валерьянка Дата: Пятница, 28.03.2014, 11:50 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 2 ±
Замечаний: 0% ±

Excel 2010
doober,прошу прощения что не получилось ответить сразу, т.к. выбраться на работу и разобраться со структурой файла не было возможности из-за больничного.

схема вложенного файла xml именно эта.
ПФР прислали только описание исходящего документа, пример ФОП не предоставили, приходится всё читать и перебирать кучу страниц :(
Но сейчас понимаю всё что читаю указано в Вашей схеме.
 
Ответить
Сообщениеdoober,прошу прощения что не получилось ответить сразу, т.к. выбраться на работу и разобраться со структурой файла не было возможности из-за больничного.

схема вложенного файла xml именно эта.
ПФР прислали только описание исходящего документа, пример ФОП не предоставили, приходится всё читать и перебирать кучу страниц :(
Но сейчас понимаю всё что читаю указано в Вашей схеме.

Автор - Валерьянка
Дата добавления - 28.03.2014 в 11:50
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Преобразование XLS → XML средствами VBA (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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