Семинар "Серверные технологии" - разработка AI(All Inclusive)-проекта
Упражнение 6. Экспорт таблиц Excel в формат XML

1. Создайте в Excel 2007 таблицу, как показано на рис.1

Рис.1 Данные для экспорта в формат XML

2. Перейдите на закладку РАЗРАБОТЧИК и в списках элементов управления формы выберите и разместите в левом верхнем углу таблицы элемент ActiveX КНОПКА - рис.2

Рис.2 Выбираем элемент ActiveX КНОПКА

3. Правой кнопкой мыши откройте окно СВОЙСТВА элемента и в строке Caption впишите новое наименование кнопки: Экспорт в XML - рис.3

Рис.3 Меняем наименование кнопки в окне свойств

4. Правой кнопкой мыши откройте ИСХОДНЫЙ ТЕКСТ элемента и скопируйте туда следующий код:

Private Sub CommandButton1_Click()
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

Function Array2XML(ByVal arrData, ByVal arrHeaders, ByVal strHeading$) As DOMDocument
'надо в Tools - References подключить библиотеки Microsoft HTML Object Library
'и Microsoft XML version 3.0.
' получает в качестве параметров:
' двумерный массив 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

ОБЯЗАТЕЛЬНО.
Надо в Tools - References подключить библиотеки
Microsoft XML version 3.0. и Microsoft HTML Object Library - рис.5

Рис.4 Подключаем библиотеку HTML

Закройте редактор Visual Basic: File -> Close and Return to Microsoft Excel

5. Сохраните файл в формате XLSM, поддерживающем исполнение макросов - рис.5

Рис.5 Сохраняем файл с поддержкой макросов

6. Выключите РЕЖИМ КОНСТРУКТОРА и нажмите кнопку [Экспорт в XML] - таблица Excel будет выведена в файл RESULT.XML. Откройте файл с помощью браузера IE. Содержимое файла будет представлено в виде, как на рис.6

Рис.6. Просмотр файла XML в браузере IE

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

6. Обратная конвертация файлов XML в XLS уже предусмотрена в Excel - достаточно в операционной системе правой кнопкой мыши открыть файл *.XML с помощью Excel.

Яндекс.Метрика