Как перевести файл Excel в XML: подробное руководство с примерами

Формат XML (eXtensible Markup Language) стал стандартом для обмена структурированными данными между системами — от бухгалтерских программ до веб-сервисов. Однако большинство пользователей хранят табличные данные в Microsoft Excel (.xls/.xlsx), и задача их конвертации в .xml возникает регулярно: при интеграции с 1С, загрузке каталогов на маркетплейсы или миграции данных в другие системы.

В этой статье разберём 5 проверенных способов преобразования Excel в XML — от встроенных функций Excel до специализированных конвертеров и скриптов. Особое внимание уделим сохранению структуры данных, кодировкам и типичным ошибкам при экспорте, которые могут сделать итоговый файл нечитаемым для целевой системы. Если вам нужно не просто "сохранить как", а получить XML с конкретной схемой (XSD), здесь вы найдёте решения для этого.

1. Встроенный экспорт в XML через Excel (для простых таблиц)

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

Инструкция:

  • 📂 Откройте файл в Excel и перейдите в Файл → Сохранить как.
  • 🔍 В поле "Тип файла" выберите Данные XML (*.xml).
  • ⚙️ Нажмите Сохранить — откроется окно с предупреждением о несохранённых возможностях (например, формулах). Подтвердите экспорт.
  • 📄 Проверьте итоговый файл в текстовом редакторе или валидаторе XML.
⚠️ Внимание: Если в таблице есть объединённые ячейки или ячейки с переносами строк, они будут экспортированы как пустые элементы. Для таких случаев используйте методы из разделов 3 или 4.
📊 Какой инструмент вы обычно используете для работы с XML?
Текстовый редактор (Notepad++, VS Code)
Excel
Специализированные конвертеры (Altova, Oxygen)
Скрипты (Python, PowerShell)
Не работаю с XML

2. Экспорт с использованием карты XML (для структурированных данных)

Если ваш XML должен соответствовать определённой схеме (XSD), например, для загрузки в 1С или на Wildberries, потребуется карта XML. Это файл с правилами, как данные из Excel преобразуются в теги XML. Метод сложнее, но гарантирует корректную структуру.

Шаги:

  1. Подготовьте XSD-схему (её обычно предоставляет система, куда вы загружаете данные).
  2. В Excel перейдите на вкладку Разработчик → Источник (если вкладки нет, включите её в Файл → Параметры → Настройка ленты).
  3. Нажмите Карты XML → Добавить и выберите вашу XSD-схему.
  4. Перетащите элементы схемы на соответствующие столбцы в таблице.
  5. Сохраните файл как XML-данные (*.xml).
Проблема Причина Решение
Ошибка "Недопустимый символ" В данных есть символы &, <, > без экранирования Замените их на &, <, > или используйте CDATA
Пропущенные теги Не все столбцы привязаны к элементам XSD Проверьте карту XML на полноту сопоставления
Некорректная кодировка Excel сохраняет в UTF-8 с BOM, а система ожидает UTF-8 без BOM Откройте файл в Notepad++ и конвертируйте кодировку

3. Конвертация через Power Query (для больших файлов)

Power Query — мощный инструмент Excel для трансформации данных, который позволяет экспортировать таблицы в XML с гибкими настройками. Этот метод подходит для файлов свыше 10 000 строк или когда нужно объединить данные из нескольких листов.

Алгоритм:

  • 📊 Выделите таблицу и перейдите в Данные → Из таблицы/диапазона (вкладка Power Query).
  • 🔄 В редакторе Power Query приведите данные к нужному формату (удалите пустые строки, исправьте типы данных).
  • 📤 Нажмите Файл → Закрыть и загрузить в... и выберите XML.
  • 🔧 В настройках экспорта укажите:
    • Корневой элемент (например, <Catalog>)
    • Элемент строки (например, <Item>)

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

Проверить форматы данных (даты в ISO 8601, числа без разделителей)|

Заменить специальные символы (&, <, >) на сущности|

Объединить данные из нескольких листов (если нужно)|

Сохранить резервную копию исходного файла-->

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

4. Автоматизация через VBA-скрипт (для продвинутых пользователей)

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

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

Sub ExportToXML()

Dim xmlDoc As Object, root As Object, row As Object, cell As Object

Dim i As Long, j As Long, lastRow As Long, lastCol As Long

Dim filePath As String

' Создаём XML-документ

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

Set root = xmlDoc.createElement("Data")

xmlDoc.appendChild root

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

lastRow = ActiveSheet.UsedRange.Rows.Count

lastCol = ActiveSheet.UsedRange.Columns.Count

' Экспортируем данные

For i = 1 To lastRow

Set row = xmlDoc.createElement("Row" & i)

root.appendChild row

For j = 1 To lastCol

Set cell = xmlDoc.createElement("Column" & j)

cell.Text = ActiveSheet.Cells(i, j).Value

row.appendChild cell

Next j

Next i

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

filePath = Environ("USERPROFILE") & "\Desktop\ExportedData.xml"

xmlDoc.Save filePath

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

End Sub

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Запустите макрос нажатием F5.
⚠️ Внимание: VBA-скрипты могут блокироваться антивирусом или политиками безопасности компании. Перед использованием проверьте, разрешено ли выполнение макросов в вашем Excel (Файл → Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Параметры макросов).
Как модифицировать скрипт для своей структуры XML?

Чтобы изменить имена тегов (например, вместо <Row1> использовать <Product>), замените строки:

Set row = xmlDoc.createElement("Row" & i) на Set row = xmlDoc.createElement("Product"),

а Set cell = xmlDoc.createElement("Column" & j) на Set cell = xmlDoc.createElement(ActiveSheet.Cells(1, j).Value) — это возьмёт названия тегов из первой строки таблицы.

5. Онлайн-конвертеры и сторонние программы

Если не хотите разбираться в настройках Excel или писать скрипты, воспользуйтесь специализированными инструментами. Они подходят для разовых задач или когда нужна поддержка специфических форматов (например, XML для Яндекс.Маркета).

Популярные сервисы:

  • 🌐 ConvertCSV — поддерживает XLS/XLSX, позволяет задавать корневой элемент и кодировку.
  • 🛠️ Altova XMLSpy — профессиональный редактор с функцией импорта из Excel и валидацией по XSD.
  • 📦 Zamzar — конвертирует файлы до 50 МБ без регистрации.
  • 🔄 TableConvert — поддерживает преобразование в XML, JSON, CSV с настройкой разделителей.
Сервис Макс. размер файла Поддержка XSD Ограничения
ConvertCSV 10 МБ Нет Реклама, ограничение на количество файлов
Altova XMLSpy Не ограничено Да Платная лицензия (от $500)
Zamzar 50 МБ Нет Очередь обработки, email-уведомление
TableConvert 5 МБ Частично Нет поддержки объединённых ячеек

Предупреждение: не загружайте конфиденциальные данные (персональную информацию, финансовые отчёты) на онлайн-сервисы. Для таких случаев используйте офлайн-инструменты вроде Altova или Oxygen XML Editor.

6. Конвертация через Python (для разработчиков)

Если вы работаете с большими объёмами данных или нужно интегрировать конвертацию в автоматизированный процесс, используйте Python с библиотеками pandas и xml.etree.ElementTree. Этот метод гибок и позволяет обрабатывать данные перед экспортом (например, чистить дубликаты или преобразовывать форматы).

Пример скрипта:

import pandas as pd

import xml.etree.ElementTree as ET

from xml.dom import minidom

Чтение Excel-файла

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

Создание корневого элемента

root = ET.Element("Catalog")

Добавление данных

for _, row in df.iterrows():

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

for col in df.columns:

ET.SubElement(item, col).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)

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

  1. Установите Python (версия 3.6+) и библиотеки: pip install pandas openpyxl.
  2. Сохраните код в файл convert.py.
  3. Поместите input.xlsx в ту же папку.
  4. Запустите скрипт командой python convert.py.

Решение типичных ошибок при конвертации

Даже при правильном экспорте итоговый XML может не подойти для целевой системы. Рассмотрим распространённые проблемы и их решения:

  • 🔴 Ошибка: "XML-документ должен содержать один корневой элемент"
    Причина: В файле несколько таблиц или листов, экспортированных без обёртки.
    Решение: Объедините данные в одну таблицу или используйте Power Query с указанием корневого тега.
  • 🔴 Ошибка: "Неверная кодировка"
    Причина: Excel сохраняет в UTF-8 с BOM, а система ожидает UTF-8 без BOM или Windows-1251.
    Решение: Конвертируйте кодировку в Notepad++ (Кодировки → Преобразовать в UTF-8 без BOM).
  • 🔴 Ошибка: "Недопустимый символ в значении"
    Причина: В данных есть символы &, <, > без экранирования.
    Решение: Замените их на сущности (&, <, >) или оберните текст в <![CDATA[ ... ]]>.

Если вы получаете ошибку от целевой системы (например, или маркетплейса), запросите у её поддержки пример корректного XML и сверьте структуру своего файла с эталоном. Часто проблема кроется в:

  • 📌 Несовпадении имён тегов (регистр имеет значение!)
  • 📌 Отсутствии обязательных атрибутов (например, id или currency)
  • 📌 Некорректных форматах данных (даты в формате DD.MM.YYYY вместо YYYY-MM-DD)

FAQ: Частые вопросы

Можно ли конвертировать Excel в XML без потери форматирования (цвета, шрифты)?

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

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

В ручном режиме (Сохранить как → XML) это невозможно. Используйте один из альтернативных методов:

  • Скопируйте диапазон на новый лист и экспортируйте его.
  • Используйте Power Query с фильтрацией данных.
  • Напишите VBA-скрипт, который экспортирует только выделенные ячейки.
Поддерживает ли Google Таблицы экспорт в XML?

Нет, Google Sheets не имеет встроенной функции экспорта в XML. Альтернативы:

  • Экспортируйте в CSV, затем конвертируйте через ConvertCSV.
  • Используйте Google Apps Script для генерации XML.
  • Скачайте файл как XLSX и преобразуйте через Excel.
Как проверить, корректен ли полученный XML?

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

  • XMLValidation — проверяет синтаксис и соответствие XSD.
  • CodeBeautify — визуализирует структуру и находит ошибки.
  • Встроенные средства в XMLSpy или Visual Studio Code (с плагином XML Tools).

Для проверки соответствия XSD-схеме используйте команду в терминале:

xmllint --schema schema.xsd yourfile.xml --noout
Можно ли автоматизировать конвертацию для пакетной обработки файлов?

Да, для этого подойдут:

  • PowerShell-скрипты (для Windows): используйте модуль ImportExcel.
  • Python: напишите скрипт, который обходит папку с XLSX-файлами и конвертирует их в XML.
  • 1С:Предприятие: если цель — загрузка в 1С, настройте обмен данными через Конфигуратор.

Пример пакетного Python-скрипта:

import os

import pandas as pd

from pathlib import Path

folder = Path("path/to/excel/files")

for file in folder.glob("*.xlsx"):

df = pd.read_excel(file)

xml_data = df.to_xml(index=False)

with open(file.stem + ".xml", "w") as f:

f.write(xml_data)