Как сохранить файл Excel в формате XML: 5 проверенных способов с примерами

Формат XML (eXtensible Markup Language) остаётся востребованным для обмена структурированными данными между системами, несмотря на распространение JSON и CSV. В Microsoft Excel функция экспорта в XML реализована неочевидно — её нет в основном меню «Сохранить как», а алгоритм зависит от версии программы и структуры исходных данных. Эта статья раскрывает все рабочие методы конвертации, включая обработку больших таблиц, привязку к схемам XSD и обход типичных ошибок.

Мы разберём не только базовый экспорт через интерфейс Excel, но и альтернативные подходы: использование Power Query для трансформации данных перед сохранением, автоматизацию через VBA, а также ручное создание XML-файлов на основе экспортированных данных. Особое внимание уделено проблемам кодировки (например, UTF-8 vs Windows-1251), которые часто портят итоговый файл при работе с кириллицей. Если вам нужно передать данные в , 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).

📊 Для чего вам нужен экспорт в XML?
Интеграция с 1С
Перенос данных в веб-сервис
Архивация структурированных данных
Требования заказчика
Другое

Способ 1: Сохранение через «XML-данные» (Excel 2019–2026)

Самый прямой метод — использовать встроенную функцию экспорта, но она доступна только если ваша таблица привязана к XML-схеме (XSD). Вот как это работает:

  1. Откройте книгу Excel и перейдите на лист с данными.
  2. В меню выберите Файл → Сохранить как.
  3. В списке форматов найдите XML-данные (*.xml) (в новых версиях может называться XML Table).
  4. Если опция неактивна, сначала привяжите данные к схеме через Разработчик → Источник 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

Выполнено: 0 / 4

Способ 2: Экспорт через Power Query (Excel 2016–2026)

Power Query (в новых версиях — Get & Transform Data) позволяет трансформировать данные перед экспортом, что особенно полезно для:

  • 🔄 Преобразования структуры (например, сводной таблицы в плоский список).
  • 🧹 Очистки данных (удаление пустых строк, замена значений).
  • 🔗 Объединения нескольких таблиц в один XML.

Алгоритм:

  1. Выделите диапазон данных и нажмите Данные → Из таблицы/диапазона (или Get Data → From Table/Range).
  2. В открывшемся редакторе Power Query приведите данные к нужной структуре (например, разверните сводные столбцы).
  3. Нажмите Файл → Закрыть и загрузить в... и выберите Только соединение.
  4. Вернитесь в 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

Чтобы использовать этот код:

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Запустите макрос через F5 или кнопку на панели.
⚠️ Внимание: По умолчанию VBA сохраняет XML в кодировке UTF-16, что может вызвать проблемы в системах, ожидающих UTF-8. Чтобы исправить это, добавьте строку xmlDoc.Encoding = "UTF-8" перед сохранением файла.

Способ 4: Ручное создание XML на основе экспортированных данных

Если встроенные инструменты Excel не подходят (например, нужна специфическая структура XML), можно:

  1. Экспортировать данные в CSV (Файл → Сохранить как → CSV UTF-8).
  2. Написать скрипт на 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 В данных есть объединённые ячейки или скрытые строки Удалите объединения (Главная → Объединить и поместить в центре) и отобразите все строки
Недопустимый символ в значении В ячейках есть символы &, <, > без экранирования Замените их на &amp;, &lt;, &gt; или используйте CDATA

Если ошибка не указана в таблице, проверьте:

  • 📌 Версию Excel: в Excel 2013 и старше могут отсутствовать функции для работы с XML.
  • 🔍 Разрешения: убедитесь, что у вас есть права на запись в папку экспорта.
  • 📊 Формат ячеек: даты и числа должны быть в текстовом виде (используйте Формат ячеек → Текстовый).

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

Можно ли экспортировать в XML без XSD-схемы?

Да, но с ограничениями:

  • В Excel 2019–2026 можно сохранить таблицу как XML Table без схемы, но структура будет плоской (без вложенности).
  • Через VBA или Power Query вы создадите XML любой структуры, но его придётся валидировать вручную.

Для интеграции с внешними системами (например, ) всегда используйте XSD, иначе данные могут не импортироваться.

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

Стандартные инструменты Excel экспортируют весь лист. Альтернативы:

  1. Скопируйте диапазон на новый лист и экспортируйте его.
  2. Используйте VBA с модификацией кода (замените lastRow/lastCol на границы выделения).
  3. Экспортируйте в CSV, затем обрежьте файл в текстовом редакторе.
Почему в XML пропали формулы, а остались только значения?

XML — это формат для хранения данных, а не вычислений. Чтобы сохранить формулы:

  • Экспортируйте их как текст: выделите ячейки с формулами → Главная → Формат → Формат ячеек → Текстовый.
  • Используйте VBA, чтобы записать формулы в атрибуты XML (например, <Cell value="100" formula="=SUM(A1:A10)">).

В большинстве случаев внешние системы (например, ) не поддерживают импорт формул — им нужны только конечные значения.

Как автоматизировать экспорт XML по расписанию?

Варианты автоматизации:

  1. Планировщик Windows:
    • Создайте VBA-скрипт с экспортом (см. Способ 3).
    • Сохраните книгу как .xlsm (с поддержкой макросов).
    • Настройте задачу в Планировщике задач, которая будет открывать файл и запускать макрос.
  • Power Automate (Microsoft Flow):
    • Создайте поток с триггером по времени.
    • Добавьте действие Excel Online → Экспорт таблицы (требуется OneDrive/SharePoint).
    • Python-скрипт:
      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-схеме?

    Инструменты для валидации:

    • Онлайн-сервисы:
    • Локальные программы:
      • Oxygen XML Editor (платный, но с trial-версией).
      • XML Spy — профессиональный инструмент для работы со схемами.
    • Командная строка (Windows):
      xmllint --schema schema.xsd input.xml --noout

      (требуется установка libxml2)

    Если валидация завершилась ошибкой, сервисы обычно показывают строку и тип проблемы (например, Element 'Customer': The attribute 'id' is required but missing).