Формат XML (eXtensible Markup Language) остаётся востребованным для обмена структурированными данными между системами, несмотря на распространение JSON и CSV. В Microsoft Excel функция экспорта в XML реализована неочевидно — её нет в основном меню «Сохранить как», а алгоритм зависит от версии программы и структуры исходных данных. Эта статья раскрывает все рабочие методы конвертации, включая обработку больших таблиц, привязку к схемам XSD и обход типичных ошибок.
Мы разберём не только базовый экспорт через интерфейс Excel, но и альтернативные подходы: использование Power Query для трансформации данных перед сохранением, автоматизацию через VBA, а также ручное создание XML-файлов на основе экспортированных данных. Особое внимание уделено проблемам кодировки (например, UTF-8 vs Windows-1251), которые часто портят итоговый файл при работе с кириллицей. Если вам нужно передать данные в 1С, SAP или другую корпоративную систему — здесь вы найдёте готовые решения.
Почему XML, а не CSV или JSON?
Прежде чем переходить к инструкциям, важно понять, в каких случаях XML предпочтительнее альтернативных форматов:
- 📌 Структурированные данные с вложенностью: XML поддерживает иерархические отношения (например, заказы → товары → характеристики), тогда как CSV плоский.
- 🔄 Интеграция с legacy-системами: многие бухгалтерские и ERP-программы (например, 1С:Предприятие 7.7) до сих пор требуют XML для обмена.
- 🛡️ Валидация по схеме: с помощью
XSDможно проверять корректность данных перед импортом, чего нет в JSON без дополнительных библиотек. - 📊 Метаданные и атрибуты: в XML каждый элемент может иметь дополнительные свойства (например,
<Product id="123" category="electronics">), что невозможно в CSV.
Однако у формата есть и минусы: XML-файлы занимают на 30–50% больше места, чем JSON с теми же данными, а их парсинг требует больше ресурсов. Если ваша задача — просто перенести таблицу в другую программу, возможно, стоит рассмотреть CSV или Excel Binary (.xlsb).
Способ 1: Сохранение через «XML-данные» (Excel 2019–2026)
Самый прямой метод — использовать встроенную функцию экспорта, но она доступна только если ваша таблица привязана к XML-схеме (XSD). Вот как это работает:
- Откройте книгу Excel и перейдите на лист с данными.
- В меню выберите
Файл → Сохранить как. - В списке форматов найдите
XML-данные (*.xml)(в новых версиях может называтьсяXML Table). - Если опция неактивна, сначала привяжите данные к схеме через
Разработчик → Источник XML.
Важно: без предварительной привязки к XSD Excel не позволит сохранить файл в XML. Если схема отсутствует, программа предложит создать её автоматически — ноGenerated schema often contains redundant elements and may not match the target system requirements. For critical integrations (e.g., with SAP), always use a pre-defined XSD provided by the receiving system.
☑️ Подготовка к экспорту в XML
Способ 2: Экспорт через Power Query (Excel 2016–2026)
Power Query (в новых версиях — Get & Transform Data) позволяет трансформировать данные перед экспортом, что особенно полезно для:
- 🔄 Преобразования структуры (например, сводной таблицы в плоский список).
- 🧹 Очистки данных (удаление пустых строк, замена значений).
- 🔗 Объединения нескольких таблиц в один XML.
Алгоритм:
- Выделите диапазон данных и нажмите
Данные → Из таблицы/диапазона(илиGet Data → From Table/Range). - В открывшемся редакторе Power Query приведите данные к нужной структуре (например, разверните сводные столбцы).
- Нажмите
Файл → Закрыть и загрузить в...и выберитеТолько соединение. - Вернитесь в Excel, откройте
Данные → Получение данных → Запустить XML-экспорт(в некоторых версиях требуется макрос).
Как экспортировать данные с русскими символами без кракозябр?
В Power Query перед экспортом добавьте шаг преобразования кодировки:
1. В редакторе запросов выберите столбец с текстом.
2. Нажмите "Преобразовать" → "Кодировка" → "UTF-8".
3. Для атрибутов XML используйте функцию `Xml.Escape` для защиты специальных символов (&, <, >).
Преимущество этого метода — гибкость: вы можете создать пользовательскую XML-структуру, отличную от исходной таблицы. Например, преобразовать строку с адресом в вложенные теги:
<Customer>
<Address>
<Street>Ленина</Street>
<House>15</House>
</Address>
</Customer>
Способ 3: Конвертация через VBA (для автоматизации)
Если вам нужно экспортировать данные в XML регулярно (например, ежедневный отчёт), VBA-скрипт сэкономит часы ручной работы. Ниже приведён универсальный код, который преобразует активный лист в XML с сохранением структуры:
Sub ExportToXML()
Dim xmlDoc As Object, root As Object, row As Object, cell As Object
Dim ws As Worksheet, lastRow As Long, lastCol As Long
Dim i As Long, j As Long
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
Set root = xmlDoc.createElement("Data")
xmlDoc.appendChild root
For i = 2 To lastRow ' Пропускаем заголовок
Set row = xmlDoc.createElement("Row")
root.appendChild row
For j = 1 To lastCol
Set cell = xmlDoc.createElement(ws.Cells(1, j).Value)
cell.Text = ws.Cells(i, j).Value
row.appendChild cell
Next j
Next i
xmlDoc.Save "C:\Export\data.xml" ' Укажите свой путь
MsgBox "Экспорт завершён!", vbInformation
End Sub
Чтобы использовать этот код:
- Нажмите
Alt + F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Запустите макрос через
F5или кнопку на панели.
⚠️ Внимание: По умолчанию VBA сохраняет XML в кодировкеUTF-16, что может вызвать проблемы в системах, ожидающихUTF-8. Чтобы исправить это, добавьте строкуxmlDoc.Encoding = "UTF-8"перед сохранением файла.
Способ 4: Ручное создание XML на основе экспортированных данных
Если встроенные инструменты Excel не подходят (например, нужна специфическая структура XML), можно:
- Экспортировать данные в CSV (
Файл → Сохранить как → CSV UTF-8). - Написать скрипт на Python, PowerShell или даже в Блокноте с заменой для преобразования в XML.
Пример скрипта на Python (требуется библиотека pandas):
import pandas as pd
df = pd.read_csv('data.csv', encoding='utf-8')
xml = df.to_xml(index=False, root_name='Catalog', row_name='Item')
with open('output.xml', 'w', encoding='utf-8') as f:
f.write(xml)
Этот метод даёт полный контроль над структурой итогового файла. Например, вы можете:
- 🔄 Добавить пространства имён (
xmlns) для совместимости со стандартами (например,xsi:schemaLocation). - 📌 Включить метаданные (дата экспорта, версия схемы).
- 🔒 Зашифровать чувствительные данные перед экспортом.
Способ 5: Использование внешних конвертеров
Если Excel упорно отказывается экспортировать данные корректно, на помощь придут специализированные инструменты:
| Инструмент | Поддерживаемые форматы | Особенности | Ссылка |
|---|---|---|---|
| Excel2XML | XLSX → XML, CSV → XML | Сохраняет формулы, поддерживает XSD | aspose.com |
| Oxygen XML Editor | Excel, CSV, JSON → XML | Профессиональный редактор с валидацией | oxygenxml.com |
| ConvertCSV | CSV → XML (бесплатно) | Онлайн-сервис, ограничение 5 MB | convertcsv.com |
| Altova MapForce | Excel, базы данных → XML | Поддержка сложных преобразований (XSLT) | altova.com |
Эти инструменты полезны, если:
- 📄 Вам нужно конвертировать многоуровневые таблицы (например, с вложенными строками).
- 🔄 Требуется периодический экспорт по расписанию (например, ночные отчёты).
- 🛡️ Нужна 100% совместимость со схемой
XSD, которую Excel не поддерживает.
⚠️ Внимание: Бесплатные онлайн-конвертеры (например, ConvertCSV) могут сохранять загруженные файлы на своих серверах. Для конфиденциальных данных используйте офлайн-решения или VBA.
Типичные ошибки и их решения
Даже при следовании инструкциям экспорт в XML может завершиться ошибкой. Вот самые распространённые проблемы и способы их исправления:
| Ошибка | Причина | Решение |
|---|---|---|
XML-карта не может быть экспортирована |
Отсутствует привязка к XSD или схема повреждена | Удалите текущую XML-карту (Разработчик → Источник XML → Удалить карту) и привяжите заново |
| Кракозябры вместо кириллицы | Неверная кодировка (CP1251 вместо UTF-8) | В VBA добавьте xmlDoc.Encoding = "UTF-8" или конвертируйте файл после экспорта в Notepad++ |
Слишком много уровней вложенности |
XML-схема ограничивает глубину тегов | Упростите структуру или разбейте данные на несколько файлов |
| Пустой файл XML | В данных есть объединённые ячейки или скрытые строки | Удалите объединения (Главная → Объединить и поместить в центре) и отобразите все строки |
Недопустимый символ в значении |
В ячейках есть символы &, <, > без экранирования | Замените их на &, <, > или используйте CDATA |
Если ошибка не указана в таблице, проверьте:
- 📌 Версию Excel: в Excel 2013 и старше могут отсутствовать функции для работы с XML.
- 🔍 Разрешения: убедитесь, что у вас есть права на запись в папку экспорта.
- 📊 Формат ячеек: даты и числа должны быть в текстовом виде (используйте
Формат ячеек → Текстовый).
FAQ: Ответы на частые вопросы
Можно ли экспортировать в XML без XSD-схемы?
Да, но с ограничениями:
- В Excel 2019–2026 можно сохранить таблицу как
XML Tableбез схемы, но структура будет плоской (без вложенности). - Через VBA или Power Query вы создадите XML любой структуры, но его придётся валидировать вручную.
Для интеграции с внешними системами (например, 1С) всегда используйте XSD, иначе данные могут не импортироваться.
Как экспортировать только выделенный диапазон, а не весь лист?
Стандартные инструменты Excel экспортируют весь лист. Альтернативы:
- Скопируйте диапазон на новый лист и экспортируйте его.
- Используйте VBA с модификацией кода (замените
lastRow/lastColна границы выделения). - Экспортируйте в CSV, затем обрежьте файл в текстовом редакторе.
Почему в XML пропали формулы, а остались только значения?
XML — это формат для хранения данных, а не вычислений. Чтобы сохранить формулы:
- Экспортируйте их как текст: выделите ячейки с формулами →
Главная → Формат → Формат ячеек → Текстовый. - Используйте VBA, чтобы записать формулы в атрибуты XML (например,
<Cell value="100" formula="=SUM(A1:A10)">).
В большинстве случаев внешние системы (например, 1С) не поддерживают импорт формул — им нужны только конечные значения.
Как автоматизировать экспорт XML по расписанию?
Варианты автоматизации:
- Планировщик Windows:
- Создайте VBA-скрипт с экспортом (см. Способ 3).
- Сохраните книгу как
.xlsm(с поддержкой макросов). - Настройте задачу в
Планировщике задач, которая будет открывать файл и запускать макрос.
- Создайте поток с триггером по времени.
- Добавьте действие
Excel Online → Экспорт таблицы(требуется OneDrive/SharePoint).
import schedule
import time
from openpyxl import load_workbook
import xml.etree.ElementTree as ET
def export_to_xml():
wb = load_workbook('data.xlsx')
ws = wb.active
# Логика преобразования в XML
root = ET.Element("Data")
for row in ws.iter_rows(values_only=True):
row_elem = ET.SubElement(root, "Row")
for cell in row:
ET.SubElement(row_elem, "Cell").text = str(cell)
ET.ElementTree(root).write("output.xml", encoding='utf-8')
schedule.every().day.at("02:00").do(export_to_xml)
while True:
schedule.run_pending()
time.sleep(60)
Как проверить, соответствует ли мой XML заданной XSD-схеме?
Инструменты для валидации:
- Онлайн-сервисы:
- XMLValidation — загрузите XML и XSD.
- Liquid XML Validator — поддерживает сложные схемы.
- Локальные программы:
- Oxygen XML Editor (платный, но с trial-версией).
- XML Spy — профессиональный инструмент для работы со схемами.
- Командная строка (Windows):
xmllint --schema schema.xsd input.xml --noout(требуется установка libxml2)
Если валидация завершилась ошибкой, сервисы обычно показывают строку и тип проблемы (например, Element 'Customer': The attribute 'id' is required but missing).