Страницы: 1
RSS
Генерирование XML файла из таблицы Excel, Как вставить дополнительный атрибут в код.
 
Здравствуйте!

Из таблицы Excel генерируется код с определённой структурой для xml файла. Всё вроде так, но никак не пойму как добавить дополнительный атрибут в код ... Как есть и как должно - указал в файле Excel. Прилагаю файл с расширением xml для просмотра результата работы макроса (файл xml должен находиться в одной папке с файлом Excel).

Код макроса взят с этого форума, но доделать не смог ...

Файлы прилагаю.
Спокойствие - величайшее проявление силы.
 
Код
    For Each cell In ra.Cells    ' перебираем все строки

        With rootnode.appendChild(XML.createElement("table"))    ' создаём узел в XML
            ' и добавляем в него значения
            .Attributes.setNamedItem(XML.createAttribute("name")).Text = "WebXml"

            With .appendChild(XML.createElement("column"))    ' для первого столбца
                .Attributes.setNamedItem(XML.createAttribute("name")).Text = "id"
                .Text = cell.EntireRow.Cells(1)
            End With

            For i = 2 To 4    ' для каждого столбца
                ColumnName$ = Cells(1, i)
                .appendChild(XML.createElement(ColumnName$)).Text = cell.EntireRow.Cells(i)
            Next
        End With
        
    Next cell
 
Здравствуйте!

EducatedFool! Вы невероятны!
Всё работает, всё как нужно. Подскажите пожалуйста где можно об этом почитать? Я изучаю Excel по книге "Профессиональное программирование на VBA в Excel 2003" автор John Walkenbach. Но я в ней не нашёл материала о котором здесь спрашивал. Тот что в ней есть, по формированию xml файлов, я уже могу использовать, но это простой перебор и запись в текстовый файл. Ваше решение задачи для меня мечта.

С большим уважением ко всем и особенно к EducatedFool,
Василий.
Спокойствие - величайшее проявление силы.
 
По книжкам - ничего не могу подсказать, сам я ни одной книги так и не прочитал)

Если мне надо написать какой-то код, в котором я не разбираюсь, — я ищу примеры кода в Яндексе.
В том же XML я ещё полтора года назад совсем не разбирался.
А как понадобилось - поглядел примеры на форумах, и через пару часов уже писал достаточно сложные обработки XML.
 
И снова здравствуйте!

Сделал с помощью добрых людей (EducatedFool) как нужно ... разбираюсь по-тихоньку (работаю ... поздно прихожу и времени мало  остаётся ...). Сейчас вот застрял на добавлении к главному узлу ещё одного общего узла для всех вложенных узлов.
Прошу помощи  :( Пожалуйста.
Спокойствие - величайшее проявление силы.
 
Попробуйте так, со вложенными конструкциями With ... End With:
(в описании изменений в Excel вы не написали про тег - я не стал его убирать)


Код
Sub YML_For_Professional()
    On Error Resume Next
    xmlpath$ = ThisWorkbook.Path & "\WebXml.xml"
    Set XML = CreateObject("Microsoft.XMLDOM")

    Dim ra As Range, cell As Range
    Set ra = Range([A2], Range("A" & Rows.Count).End(xlUp))    ' заполненные строки

    ' задаем кодировку для XML
    XML.appendChild XML.createProcessingInstruction("xml", "version='1.0' encoding='utf-8'")

    With XML.appendChild(XML.createElement("pma_xml_export"))
        .Attributes.setNamedItem(XML.createAttribute("version")).Text = "1.0"
        With .appendChild(XML.createElement("databas"))
            .Attributes.setNamedItem(XML.createAttribute("name")).Text = "loginuser"
            ' добавляем дочерние узлы для каждой строки
            For Each cell In ra.Cells    ' перебираем все строки
                With .appendChild(XML.createElement("table"))    ' создаём узел в XML
                    ' и добавляем в него значения
                    .Attributes.setNamedItem(XML.createAttribute("name")).Text = "WebXml"
                    For i = 1 To 4    ' для каждого столбца
                        With .appendChild(XML.createElement("column"))    ' к элементу column
                            ColumnName$ = Cells(1, i)    'дописываем атрибут name
                            .Attributes.setNamedItem(XML.createAttribute("name")).Text = ColumnName$
                            .Text = cell.EntireRow.Cells(i)    'и присваиваем значение
                        End With
                    Next
                End With
            Next cell
        End With
    End With

    XML.Save xmlpath$    ' сохраняем XML
End Sub
 
Благодарю Вас! Работает как нужно! Про тег все правильно.
Отпишусь после заливки на сервер.

С огромным уважением,
Василий.
Спокойствие - величайшее проявление силы.
 
Залил на сервер - всё работает!
Низкий Вам поклон EducatedFool!

Всем доброй ночи!
Спокойствие - величайшее проявление силы.
Страницы: 1
Наверх