Как сохранить файл Excel в формате XML: пошаговые инструкции для всех версий

Экспорт данных из Excel в XML — задача, с которой сталкиваются бухгалтеры, программисты и аналитики при интеграции таблиц с внешними системами. Несмотря на то, что Microsoft Excel не поддерживает прямой экспорт в XML через меню "Сохранить как", существуют обходные пути — от встроенных инструментов до специализированных скриптов. В этой статье разберём 5 рабочих методов, включая сохранение с сохранением структуры, экспорт через Power Query и конвертацию с помощью VBA.

XML (eXtensible Markup Language) — универсальный формат для обмена данными между программами, и его корректное формирование из Excel требует внимания к деталям. Например, при экспорте через "Сохранить как XML-данные" (.xml) Excel автоматически преобразует ячейки в теги, но игнорирует формулы и условное форматирование. Если вам нужно сохранить вычисления или сложную структуру, потребуются дополнительные инструменты.

Мы рассмотрим решения для разных версий Excel (2010–2023), включая Microsoft 365, а также альтернативные способы для крупных файлов (более 10 000 строк). Все инструкции протестированы на реальных данных — от простых прайс-листов до многомерных отчётов с вложенными таблицами.

1. Сохранение в XML через встроенные инструменты Excel

Самый простой способ — использовать функцию Сохранить как XML-данные, доступную в Excel 2010–2019. Однако у этого метода есть ограничения:

  • 📌 Сохраняются только значения ячеек (формулы теряются).
  • 📌 Структура XML формируется автоматически по шапке таблицы.
  • 📌 Не поддерживаются сводные таблицы и графики.
  • 📌 Максимальный размер файла — ~10 000 строк (в Excel 2016+ до 50 000).

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

  1. Откройте файл Excel и выделите диапазон данных (включая заголовки столбцов).
  2. Перейдите в Файл → Сохранить как.
  3. В поле "Тип файла" выберите XML-данные (*.xml).
  4. Нажмите Сохранить и подтвердите экспорт в диалоговом окне.

Если опция XML-данные отсутствует в списке форматов, значит:

  • 🔹 У вас Excel 2021/365 — функция перенесена в Экспорт → Изменить тип файла.
  • 🔹 Данные содержат недопустимые символы (например, &, <, >).
  • 🔹 Файл сохранён в формате .xlsx с макросами (нужно пересохранить как .xlsx без макросов).
📊 Какой версии Excel вы пользуетесь?
Excel 2010-2013
Excel 2016-2019
Excel 2021/365
Другая версия

2. Экспорт XML через Power Query (рекомендуется для больших файлов)

Power Query (в Excel 2016+) позволяет гибко настраивать структуру XML перед экспортом. Этот метод подходит для:

  • 📊 Файлов свыше 50 000 строк.
  • 📊 Данных с формулами (преобразуются в значения).
  • 📊 Таблиц с вложенными структурами (например, заказы с позициями).

Инструкция:

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

Преимущество метода: вы можете отредактировать структуру XML перед экспортом, например, переименовать теги или добавить атрибуты. Для этого:

  1. В Power Query выделите столбец, кликните правой кнопкой → Переименовать (это изменит имя тега в XML).
  2. Чтобы добавить атрибут, используйте Добавить столбец → Настраиваемый столбец с формулой вида = "[@ИмяСтолбца] & "" attr="" & Text.From([ДругойСтолбец])".

Удалить пустые строки и столбцы

Проверить формат ячеек (даты должны быть в формате ДД.ММ.ГГГГ)

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

Преобразовать формулы в значения (Ctrl+C → Специальная вставка → Значения)-->

3. Конвертация Excel в XML с помощью VBA-макроса

Если вам нужно автоматизировать экспорт или сохранить формулы в XML, используйте VBA. Ниже приведён скрипт, который создаёт XML-файл с тегами по именам столбцов и сохраняет его в указанную папку:

Sub ExportToXML()

Dim ws As Worksheet

Dim xmlPath As String

Dim xmlContent As String

Dim lastRow As Long, lastCol As Long

Dim i As Long, j As Long

' Укажите лист и путь для сохранения

Set ws = ThisWorkbook.Sheets("Лист1")

xmlPath = "C:\Export\data.xml" ' Измените путь!

' Определяем границы данных

lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

' Формируем XML

xmlContent = "" & vbCrLf & "" & vbCrLf

' Проходим по строкам

For i = 2 To lastRow ' Начинаем со 2-й строки (1-я - заголовки)

xmlContent = xmlContent & " " & vbCrLf

For j = 1 To lastCol

xmlContent = xmlContent & " <" & ws.Cells(1, j).Value & ">" & _

ws.Cells(i, j).Value & "" & vbCrLf

Next j

xmlContent = xmlContent & " " & vbCrLf

Next i

xmlContent = xmlContent & ""

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

Open xmlPath For Output As #1

Print #1, xmlContent

Close #1

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

End Sub

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Измените Sheets("Лист1") на имя вашего листа и путь C:\Export\data.xml.
  4. Запустите макрос клавишей F5.
⚠️ Внимание: Макрос сохраняет только значения — формулы будут потеряны. Чтобы экспортировать формулы, замените ws.Cells(i, j).Value на ws.Cells(i, j).Formula (но это может привести к ошибкам в XML, если формулы содержат запрещённые символы).

4. Экспорт с сохранением структуры: XML-карты (Excel 2013+)

Если вам нужно, чтобы XML соответствовал заранее определённой схеме (например, для интеграции с 1С или бухгалтерскими программами), используйте XML-карты. Этот метод позволяет:

  • 🔄 Сопоставлять столбцы Excel с элементами XML.
  • 🔄 Экспортировать данные в строго заданном формате.
  • 🔄 Импортировать XML обратно в Excel без потерь.

Инструкция:

  1. Перейдите на вкладку Разработчик (если её нет, включите в Файл → Параметры → Настройка ленты).
  2. Нажмите Исходный код в группе XML.
  3. В открывшемся окне добавьте схему XML (файл .xsd) или создайте её вручную.
  4. Перетащите элементы из панели XML-карта на ячейки Excel для сопоставления.
  5. После заполнения данных нажмите Экспорт в группе XML.

Пример схемы XML для прайс-листа:

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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="PriceList">

<xs:complexType>

<xs:sequence>

<xs:element name="Item" maxOccurs="unbounded">

<xs:complexType>

<xs:attribute name="ID" type="xs:string"/>

<xs:attribute name="Name" type="xs:string"/>

<xs:attribute name="Price" type="xs:decimal"/>

</xs:complexType>

</xs:element>

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:schema>

⚠️ Внимание: При использовании XML-карт не изменяйте структуру таблицы после сопоставления — это приведёт к ошибкам при экспорте. Если нужно добавить столбец, сначала обновите схему XML.

5. Альтернативные способы: онлайн-конвертеры и Python

Если встроенные инструменты Excel не подходят, рассмотрите внешние решения:

Метод Плюсы Минусы Когда использовать
Онлайн-конвертеры (например, ConvertCSV, TableConvert) ✅ Не требует установки
✅ Поддерживает большие файлы
❌ Риск утечки данных
❌ Ограничения по размеру (обычно до 10 МБ)
Для разовых задач с неконфиденциальными данными
Python + библиотека pandas ✅ Гибкая настройка структуры XML
✅ Поддержка формул и форматирования
❌ Требует знания Python
❌ Нужна установка библиотек
Для автоматизации и обработки сложных данных
Специализированное ПО (Altova MapForce, Oxygen XML Editor) ✅ Профессиональные инструменты для XSD/XSLT
✅ Поддержка крупных проектов
❌ Платные лицензии
❌ Сложный интерфейс
Для корпоративных задач с высокими требованиями к XML

Пример кода на Python для конвертации Excel в XML:

import pandas as pd

import xml.etree.ElementTree as ET

Чтение Excel

df = pd.read_excel("data.xlsx")

Создание XML

root = ET.Element("Data")

for _, row in df.iterrows():

item = ET.SubElement(root, "Row")

for col in df.columns:

ET.SubElement(item, col).text = str(row[col])

Сохранение

tree = ET.ElementTree(root)

tree.write("output.xml", encoding="utf-8", xml_declaration=True)

Частые ошибки и их решения

При экспорте Excel в XML пользователи сталкиваются с типичными проблемами:

  • 🚫 Ошибка "Неверный формат XML" — возникает при наличии в данных символов &, <, >. Решение: замените их на &, <, > с помощью функции =ПОДСТАВИТЬ().
  • 🚫 Потеря форматирования — Excel не сохраняет цвета, шрифты и границы. Решение: используйте VBA для добавления атрибутов стиля в XML.
  • 🚫 Ограничение на количество строк — в Excel 2010–2016 максимальный экспорт ~10 000 строк. Решение: разбейте данные на несколько файлов или используйте Power Query.
  • 🚫 Неправильная кодировка (кракозябры) — возникает при сохранении в ANSI вместо UTF-8. Решение: откройте XML в Notepad++ и пересохраните с кодировкой UTF-8.

Если XML не проходит валидацию в целевой системе (например, в 1С), проверьте:

  • 🔹 Соответствие структуры XML схеме XSD (если она предоставлена).
  • 🔹 Отсутствие пустых тегов (например, <Price></Price> вместо <Price>0</Price>).
  • 🔹 Правильность типов данных (например, даты должны быть в формате YYYY-MM-DD).
Как проверить XML на ошибки?

Используйте онлайн-валидаторы, например XMLValidation или CodeBeautify. Загрузите файл и проверьте на соответствие схеме (если есть XSD). Обратите внимание на ошибки вида "Invalid character" или "Unexpected end of tag" — они указывают на проблемы с кодировкой или структурой.

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

Можно ли сохранить в XML сводную таблицу?

Нет, Excel не поддерживает прямой экспорт сводных таблиц в XML. Решения:

  1. Скопируйте данные сводной таблицы на новый лист (Ctrl+C → Специальная вставка → Значения) и экспортируйте его.
  2. Используйте Power Query для преобразования исходных данных в плоскую таблицу.
Как сохранить XML с кириллическими тегами?

Excel автоматически преобразует кириллические имена столбцов в транслит (например, "Наименование" → "Naimenovanie"). Чтобы сохранить оригинальные имена:

  1. Используйте VBA-макрос и вручную задайте имена тегов в коде.
  2. Экспортируйте данные в CSV, а затем конвертируйте в XML через Python или Notepad++ с заменой имён.

Пример кода для VBA (замена транслита на кириллицу):

' Замените эту строку в макросе:

xmlContent = xmlContent & " <" & ReplaceTags(ws.Cells(1, j).Value) & ">" & _

ws.Cells(i, j).Value & "ReplaceTags(ws.Cells(1, j).Value) & ">" & vbCrLf

' Добавьте функцию:

Function ReplaceTags(name As String) As String

Select Case name

Case "Naimenovanie": ReplaceTags = "Наименование"

Case "Kolichestvo": ReplaceTags = "Количество"

' Добавьте другие замены

Case Else: ReplaceTags = name

End Select

End Function

Почему при экспорте теряются ведущие нули (например, в артикулах "00123")?

Excel по умолчанию убирает ведущие нули в числовых ячейках. Решения:

  • 🔹 Перед экспортом измените формат ячеек с артикулами на Текстовый.
  • 🔹 Добавьте апостроф перед числом (например, '00123).
  • 🔹 В Power Query используйте преобразование в текст: выделите столбец → Преобразовать → Формат → Текст.
Как автоматизировать экспорт XML для ежедневных отчётов?

Для автоматизации подойдут:

  1. VBA-макрос с таймером: добавьте в код строку Application.OnTime Now + TimeValue("01:00:00"), "ExportToXML" для запуска каждый час.
  2. Power Automate (Microsoft Flow): создайте поток, который берёт файл из папки, конвертирует в XML и отправляет по email.
  3. Python-скрипт по расписанию: используйте schedule или Windows Task Scheduler для запуска скрипта ежедневно.

Пример батч-файла для автоматического запуска Python-скрипта:

@echo off

python C:\scripts\excel_to_xml.py

pause

Можно ли экспортировать в XML несколько листов Excel?

Да, но не через стандартный экспорт. Варианты:

  1. VBA-макрос: модифицируйте код из раздела 3, добавив цикл по листам:
    For Each ws In ThisWorkbook.Worksheets
    

    ' Код экспорта для каждого листа

    Next ws

  2. Power Query: объедините данные с нескольких листов в один запрос, затем экспортируйте.
  3. Специализированное ПО: Altova MapForce поддерживает мультилистовый экспорт.

Пример структуры XML для нескольких листов:

<Workbook>

<Sheet name="Лист1">

<Row>...</Row>

</Sheet>

<Sheet name="Лист2">

<Row>...</Row>

</Sheet>

</Workbook>

1. Формат ячеек (даты, числа, текст).

2. Отсутствие запрещённых символов (&, <, >).

3. Соответствие структуры XML требованиям целевой системы (если есть XSD-схема).-->