Sub XMLExport() Dim Заголовок As Range, Данные As Range Set Заголовок = Range("a1:f1") Set Данные = Range([A2], Range("A" & Rows.Count).End(xlUp)).Resize(, Заголовок.Columns.Count)
' формируем 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
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 Уровень <Отчество>ИВАНОВИЧ</Отчество>
Sub XMLExport() Dim Заголовок As Range, Данные As Range Set Заголовок = Range("a1:f1") Set Данные = Range([A2], Range("A" & Rows.Count).End(xlUp)).Resize(, Заголовок.Columns.Count)
' формируем 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
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 Уровень <Отчество>ИВАНОВИЧ</Отчество>
Подскажите пожалуйста можно ли реализовать данный метод так, чтобы на основании таблицы создавать ХML, но с подзаголовками в несколько уровней?
Можно. 2 варианта. 1. Под конкретную схему документа пишете конкретнй макрос,либо толково ее надо расписать в макросе и данные на листе правильно расположить. 2.Данные на листе с группировкой.тогда по уровням группивровки можно получить вложение полей.
Цитата
Подскажите пожалуйста можно ли реализовать данный метод так, чтобы на основании таблицы создавать ХML, но с подзаголовками в несколько уровней?
Можно. 2 варианта. 1. Под конкретную схему документа пишете конкретнй макрос,либо толково ее надо расписать в макросе и данные на листе правильно расположить. 2.Данные на листе с группировкой.тогда по уровням группивровки можно получить вложение полей.doober
Таблица не правильная. Попробуйте разобраться со структурой файла XML в общем и в частности, конкретно с вашим.
Цитата
.2 Уровень <ПачкаВходящихДокументов.ДоставочнаяОрганизация="БАНК">
Точки не допускаюся,там пробел должен быть,ДоставочнаяОрганизация-это атрибут нода ПачкаВходящихДокументов Эта строка меня сильно смущает,так не может быть файл схемы xsd вашего файла где? Пришлось горе идти к вам,во вложении схема вашего файла xml из другой темы Посмотрите здесь,там есть полезная информация для вас
Таблица не правильная. Попробуйте разобраться со структурой файла XML в общем и в частности, конкретно с вашим.
Цитата
.2 Уровень <ПачкаВходящихДокументов.ДоставочнаяОрганизация="БАНК">
Точки не допускаюся,там пробел должен быть,ДоставочнаяОрганизация-это атрибут нода ПачкаВходящихДокументов Эта строка меня сильно смущает,так не может быть файл схемы xsd вашего файла где? Пришлось горе идти к вам,во вложении схема вашего файла xml из другой темы Посмотрите здесь,там есть полезная информация для васdoober
doober,прошу прощения что не получилось ответить сразу, т.к. выбраться на работу и разобраться со структурой файла не было возможности из-за больничного.
схема вложенного файла xml именно эта. ПФР прислали только описание исходящего документа, пример ФОП не предоставили, приходится всё читать и перебирать кучу страниц Но сейчас понимаю всё что читаю указано в Вашей схеме.
doober,прошу прощения что не получилось ответить сразу, т.к. выбраться на работу и разобраться со структурой файла не было возможности из-за больничного.
схема вложенного файла xml именно эта. ПФР прислали только описание исходящего документа, пример ФОП не предоставили, приходится всё читать и перебирать кучу страниц Но сейчас понимаю всё что читаю указано в Вашей схеме.Валерьянка