Конвертация Excel в XML: подробное руководство с примерами

Преобразование данных из Excel в формат XML — задача, с которой сталкиваются аналитики, разработчики и специалисты по интеграции систем. Несмотря на кажущуюся простоту, процесс требует внимания к деталям: неверно выбранный метод может привести к потере структуры данных, искажению кодировки или ошибкам валидации. В этой статье мы разберём все актуальные способы конвертации — от встроенных инструментов Microsoft Excel до программных решений для автоматизации.

Особенность XML заключается в его иерархической структуре, которая принципиально отличается от табличного формата .xlsx. Это означает, что простого "сохранения как" часто недостаточно: требуется предварительная подготовка данных, Mapping полей и иногда даже ручная правка результирующего файла. Мы рассмотрим не только базовые сценарии, но и нюансы работы с большими файлами (100+ тыс. строк), вложенными таблицами и специфическими требованиями к схеме XML (XSD).

Почему XML: преимущества и типичные сценарии использования

Формат XML (eXtensible Markup Language) остаётся стандартом де-факто для обмена структурированными данными между системами. Его ключевые преимущества перед Excel:

  • 🔄 Кросс-платформенность: XML читается любыми системами — от до SAP, в то время как .xlsx требует совместимости с Microsoft Office или альтернативными редакторами.
  • 📊 Иерархическая структура: позволяет описывать сложные зависимости между данными (например, заказы → товары → характеристики), которые в Excel приходится "расплющивать" в таблицу.
  • 🔒 Валидация по схеме: с помощью XSD можно гарантировать корректность данных ещё до их обработки системой-получателем.
  • 🌐 Интеграция с API: большинство современных веб-сервисов (например, Яндекс.Маркет, Ozon) принимают каталоги товаров именно в XML.

Типичные задачи, где требуется конвертация:

  • 📦 Обмен данными с 1С: выгрузка справочников номенклатуры, контрагентов или остатков на складах.
  • 🛒 Загрузка каталогов на маркетплейсы (Wildberries, Алиэкспресс) или в системы электронного документооборота.
  • 📈 Импорт в аналитические системы типа Power BI или Tableau, где XML часто используется как промежуточный формат.
  • 🔧 Миграция данных между базами (например, из Excel в MySQL через XML как посредник).
⚠️ Внимание: Если ваша цель — загрузка данных в , уточните версию платформы. 1С:Предприятие 8.3 поддерживает импорт XML по схеме CommerceML, а для более старых версий может потребоваться ручная доработка файла.

Метод 1: Экспорт через "Сохранить как" в Excel (базовый способ)

Самый простой, но ограниченный вариант — использовать встроенную функцию Microsoft Excel. Он подходит для небольших таблиц (до 10 тыс. строк) без сложной структуры.

  1. Откройте файл в Excel и перейдите в Файл → Сохранить как.
  2. В списке форматов выберите XML данные (*.xml).
  3. Нажмите Сохранить. Если появится предупреждение о несоответствии данных схеме, выберите Продолжить.

Ограничения метода:

  • 🚫 Не сохраняет форматирование ячеек (цвета, шрифты).
  • 🚫 Игнорирует вложенные таблицы и сводные.
  • 🚫 Генерирует XML без учёта пользовательской схемы (XSD).

Удалите объединённые ячейки

Замените специальные символы (&, <, >) на их HTML-эквиваленты (&, <, >)

Проверить кодировку (должна быть UTF-8)

Убедитесь, что в первой строке — заголовки столбцов-->

Результирующий XML будет иметь плоскую структуру:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Данные_листа>

<Строка>

<Имя_столбца1>Значение</Имя_столбца1>

<Имя_столбца2>Значение</Имя_столбца2>

</Строка>

</Данные_листа>

⚠️ Внимание: Если в ячейках есть формулы, Excel сохраняет в XML только их текущие значения. Чтобы экспортировать сами формулы, используйте методы 3 или 4 из этой статьи.

Метод 2: Конвертация через Power Query (для сложных структур)

Power Query — инструмент Excel и Power BI, позволяющий трансформировать данные перед экспортом. Он незаменим, если нужно:

  • 🔄 Преобразовать сводные таблицы в иерархический XML.
  • 📊 Объединить данные из нескольких листов.
  • 🔍 Отфильтровать строки по условию перед экспортом.

Пошаговая инструкция:

  1. Выделите таблицу и перейдите на вкладку Данные → Получить данные → Из таблицы/диапазона.
  2. В открывшемся окне Power Query отредактируйте структуру (при необходимости добавьте столбцы, измените типы данных).
  3. Нажмите Файл → Закрыть и загрузить в... и выберите Только создать подключение.
  4. Вернитесь в Excel, откройте Данные → Запросы и подключения → Экспорт данных и сохраните как XML.
Пример трансформации в Power Query для вложенной структуры

Допустим, у вас есть таблица с заказами, где в одной ячейке перечислены товары через запятую:

Заказ1 | Товар1,Товар2,Товар3.

Через Power Query можно разделить эту ячейку по запятой и создать вложенные узлы XML:

<Заказ>

<Номер>Заказ1</Номер>

<Товары>

<Товар>Товар1</Товар>

<Товар>Товар2</Товар>

</Товары>

</Заказ>

Преимущества метода:

  • ✅ Сохраняет связи между данными (например, "заказ → товары").
  • ✅ Позволяет очищать данные перед экспортом (удалять дубли, исправлять ошибки).
  • ✅ Поддерживает XSD-схемы при настройке.

Excel

Power Query

Python (pandas)

SQL

Другой-->

Метод 3: Автоматизация через VBA (для повторяющихся задач)

Если конвертацию нужно выполнять регулярно, имеет смысл написать макрос на VBA. Этот способ требует начальных знаний программирования, но даёт полный контроль над процессом.

Пример кода для базового экспорта:

Sub ExportToXML()

Dim xmlDoc As Object

Dim ws As Worksheet

Dim row As Range, cell As Range

Dim xmlPath As String

Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")

Set ws = ThisWorkbook.Sheets("Лист1") ' имя листа

xmlPath = "C:\output.xml" ' путь к файлу

' Создаём корневой элемент

Dim root As Object

Set root = xmlDoc.createElement("Данные")

xmlDoc.appendChild root

' Проходим по строкам (начиная со 2-й, если 1-я — заголовки)

For Each row In ws.UsedRange.Rows

If row.Row > 1 Then

Dim rowElement As Object

Set rowElement = xmlDoc.createElement("Строка")

root.appendChild rowElement

' Проходим по ячейкам строки

For Each cell In row.Cells

Dim cellElement As Object

Set cellElement = xmlDoc.createElement(ws.Cells(1, cell.Column).Value)

cellElement.Text = cell.Value

rowElement.appendChild cellElement

Next cell

End If

Next row

' Сохраняем файл

xmlDoc.Save xmlPath

MsgBox "XML-файл сохранён по пути: " & xmlPath

End Sub

Чтобы запустить макрос:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в модуль (Insert → Module).
  3. Запустите макрос через F5 или кнопку Run.
xmlDoc.loadXML ""

xmlDoc.setProperty "SelectionNamespaces", "xmlns:xs=""http://www.w3.org/2001/XMLSchema"""

Это поможет избежать ошибок валидации.-->

Метод 4: Онлайн-конвертеры (быстро, но с рисками)

Если у вас нет доступа к Excel или нужно сконвертировать файл единожды, можно воспользоваться онлайн-сервисами. Популярные варианты:

Сервис Макс. размер файла Поддержка XSD Ограничения
ConvertCSV 50 МБ ❌ Нет Удаляет пустые ячейки
Zamzar 150 МБ ❌ Нет Требует email для отправки результата
CodeBeautify 10 МБ ✅ Частично Ограничение на количество строк (10 тыс.)
FreeFormatter 25 МБ ✅ Да Медленная обработка больших файлов

Как пользоваться:

  1. Загрузите файл .xlsx или .xls на сайт.
  2. При необходимости укажите параметры (разделитель, кодировку).
  3. Скачайте результирующий .xml.
⚠️ Внимание: Онлайн-сервисы не гарантируют конфиденциальность данных. Не загружайте файлы с персональной информацией (ФИО, паспортные данные) или коммерческой тайной. Для чувствительных данных используйте офлайн-методы (1–3).

Метод 5: Программные решения (Python, C#, Java)

Для автоматизации конвертации в крупных проектах используют скрипты. Рассмотрим пример на Python с библиотекой pandas:

import pandas as pd

import xml.etree.ElementTree as ET

from xml.dom import minidom

Чтение Excel

df = pd.read_excel("input.xlsx", sheet_name="Лист1")

Создание XML

root = ET.Element("Данные")

for _, row in df.iterrows():

row_element = ET.SubElement(root, "Строка")

for col in df.columns:

col_element = ET.SubElement(row_element, col)

col_element.text = str(row[col])

Сохранение с форматированием

xml_str = ET.tostring(root, encoding="utf-8")

xml_pretty = minidom.parseString(xml_str).toprettyxml(indent=" ")

with open("output.xml", "w", encoding="utf-8") as f:

f.write(xml_pretty)

Преимущества программного подхода:

  • ✅ Обработка файлов любого размера (миллионы строк).
  • ✅ Гибкая настройка структуры XML (вложенные узлы, атрибуты).
  • ✅ Интеграция в пакетные задачи (например, автоматическая выгрузка из Excel в по расписанию).

Для C# можно использовать библиотеку EPPlus:

using OfficeOpenXml;

using System.Xml;

var package = new ExcelPackage(new FileInfo("input.xlsx"));

var worksheet = package.Workbook.Worksheets[0];

var xmlDoc = new XmlDocument();

var root = xmlDoc.CreateElement("Данные");

xmlDoc.AppendChild(root);

// Чтение данных и создание XML-узлов

for (int row = 2; row <= worksheet.Dimension.End.Row; row++)

{

var rowElement = xmlDoc.CreateElement("Строка");

root.AppendChild(rowElement);

for (int col = 1; col <= worksheet.Dimension.End.Column; col++)

{

var cellElement = xmlDoc.CreateElement(worksheet.Cells[1, col].Value?.ToString());

cellElement.InnerText = worksheet.Cells[row, col].Value?.ToString();

rowElement.AppendChild(cellElement);

}

}

xmlDoc.Save("output.xml");

Сравнение методов: какой выбрать?

Критерий "Сохранить как" Power Query VBA Онлайн-сервисы Программирование
Сложность ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
Макс. размер файла 10 тыс. строк 100 тыс. строк 1 млн строк 5–50 МБ Неограничено
Поддержка XSD ❌ (кроме FreeFormatter)
Автоматизация
Стоимость Бесплатно Бесплатно Бесплатно Бесплатно (ограничения) Бесплатно (библиотеки)

Типичные ошибки и как их избежать

Даже при правильном выборе метода конвертации можно столкнуться с проблемами. Рассмотрим самые частые:

  • 🔤 Неправильная кодировка: XML должен сохраняться в UTF-8. Если в результате получаются "кракозябры", проверьте настройки региональных стандартов в Excel (Файл → Параметры → Дополнительно → Веб-параметры).
  • 🔢 Потеря ведущих нулей: Excel автоматически обрезает нули в числовых полях (например, артикул 00123 станет 123). Решение: предварительно отформатируйте столбец как Текстовый.
  • 📉 Искажение дат: Excel хранит даты как числа, а при экспорте в XML они могут преобразовываться в неправильный формат. Используйте функцию =ТЕКСТ(A1; "yyyy-mm-dd") для приведения к стандарту ISO 8601.
  • 🔗 Ссылки на другие листы: Если в формулах есть ссылки вида =Лист2!A1, они не экспортируются в XML. Замените их на абсолютные значения перед конвертацией.
Как проверить XML на ошибки?

Используйте валидаторы:

- XMLValidation (проверка на well-formed)

- Liquid XML Validator (проверка по XSD-схеме)

- xmllint (утилита для Linux/macOS):

xmllint --noout --valid output.xml

Если после экспорта XML не принимается системой-получателем, проверьте:

  1. Совпадает ли структура с ожидаемой XSD-схемой.
  2. Нет ли в данных запрещённых символов (например, & должен быть заменён на &).
  3. Корректны ли namespaces (если они используются).

FAQ: Ответы на частые вопросы

Можно ли конвертировать Excel в XML без потери форматирования?

Нет, XML — это формат данных, а не представления. Он сохраняет только содержимое ячеек и их взаимосвязи, но не стили (шрифты, цвета, границы). Если нужно сохранить оформление, рассмотрите формат PDF или HTML.

Как экспортировать в XML только выделенный диапазон?

В Excel это невозможно через "Сохранить как". Альтернативы:

  1. Скопируйте диапазон на новый лист и экспортируйте его.
  2. Используйте VBA (укажите диапазон в коде: ws.Range("A1:C100")).
  3. В Power Query отфильтруйте данные перед экспортом.
Поддерживает ли Google Sheets экспорт в XML?

Нет, Google Sheets не умеет сохранять файлы в XML напрямую. Обходные пути:

  • Экспортируйте в CSV, а затем конвертируйте через CodeBeautify.
  • Используйте Google Apps Script для генерации XML:
function exportToXML() {

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

var data = sheet.getDataRange().getValues();

var xml = '<Данные>';

for (var i = 1; i < data.length; i++) {

xml += '<Строка>';

for (var j = 0; j < data[i].length; j++) {

xml += '<' + data[0][j] + '>' + data[i][j] + '';

}

xml += '';

}

xml += '';

DriveApp.createFile('output.xml', xml);

}

Как конвертировать XML обратно в Excel?

Для обратного преобразования:

  1. В Excel: Данные → Получить данные → Из файла → Из XML.
  2. В Power Query: используйте запрос Xml.Tables.
  3. Через Python:
import pandas as pd

import xml.etree.ElementTree as ET

tree = ET.parse('input.xml')

root = tree.getroot()

data = []

for row in root.findall('Строка'):

row_data = {}

for child in row:

row_data[child.tag] = child.text

data.append(row_data)

df = pd.DataFrame(data)

df.to_excel('output.xlsx', index=False)

Какая версия Excel поддерживает экспорт в XML?

Функция Сохранить как XML доступна в:

  • Microsoft Excel 2003 и новее (включая Excel 2019 и Microsoft 365).
  • Excel для Mac (начиная с версии 2011).

В Excel 2007 и 2010 может потребоваться установка надстройки Microsoft XML Parser (MSXML).