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

Почему XML востребован для данных из Excel

Формат XML (eXtensible Markup Language) стал стандартом де-факто для обмена структурированными данными между системами. В отличие от бинарных форматов .xls или .xlsx, XML-файлы читаемы как людьми, так и машинами, что делает их идеальными для интеграции с , SAP, веб-сервисами или базами данных. Например, бухгалтерские программы часто требуют импорт налоговой отчётности именно в XML-формате с жёсткой структурой тегов.

Преобразование таблиц Excel в XML актуально в трёх ключевых сценариях:

  • 📤 Обмен данными между корпоративными системами (например, выгрузка прайс-листов для партнёров).
  • 📊 Автоматизация отчётности — когда данные из Excel нужно загрузить в государственные порталы (например, ФНС или Росалкогольрегулирование).
  • 🔄 Миграция данных при смене ПО (перенос справочников из Excel в новую CRM).

Главная сложность — XML требует чёткой иерархии тегов, тогда как Excel хранит данные в плоской таблице. Без правильной настройки экспорта вы получите файл с бессмысленным набором тегов или потеряете часть данных. Далее разберём, как избежать типичных ошибок и выбрать оптимальный метод конвертации.

📊 Для чего вам нужна конвертация Excel в XML?
Обмен данными с партнёрами
Загрузка отчётности в госсистемы
Миграция данных в новое ПО
Другое

Способ 1: Экспорт через Excel (встроенные инструменты)

Самый простой метод — использовать встроенные функции Microsoft Excel или LibreOffice Calc. Он подходит для одноразовых задач, когда не требуется автоматизация. Рассмотрим пошаговую инструкцию для Excel 2019/2021/365:

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

⚠️ Внимание: Встроенный экспорт Excel имеет критические ограничения:

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

☑️ Подготовка данных перед экспортом в XML

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

Для сложных таблиц с вложенными структурами (например, иерархические справочники) лучше использовать карты XML. Чтобы их создать:

  1. Перейдите на вкладку Разработчик (если её нет, включите в Файл → Параметры → Настройка ленты).
  2. Нажмите Исходный код в группе XML.
  3. В открывшемся редакторе создайте схему (XSD) или загрузите готовую.

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

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

  • 🔄 Преобразовать «широкие» таблицы (много столбцов) в «длинные» (иерархические).
  • 🧹 Очистить данные от дубликатов или ошибок.
  • 🔗 Объединить несколько таблиц в одну XML-структуру.

Алгоритм действий:

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

Пример кода на языке M (язык формул Power Query) для преобразования таблицы в иерархический XML:

let

Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],

Группировка = Table.Group(Источник, {"Категория"}, {{"Данные", each _, type table}}),

ВXML = Xml.FromValue(Группировка)

in

ВXML

Способ 3: Онлайн-конвертеры (быстро, но небезопасно)

Для разовых задач удобно использовать веб-сервисы, такие как ConvertCSV, Zamzar или CloudConvert. Они позволяют загрузить .xlsx и получить .xml без установки ПО. Однако у этого метода есть риски:

СервисМакс. размер файлаПоддержка структурыКонфиденциальность
ConvertCSV50 МББазовая (без вложенных тегов)Данные удаляются через 24 часа
Zamzar50 МБ (бесплатно)Средняя (поддержка атрибутов)Требует email для скачивания
CloudConvert1 ГБРасширенная (настраиваемая схема)Шифрование при передаче

⚠️ Внимание: Онлайн-конвертеры не подходят для работы с конфиденциальными данными (персональные данные клиентов, финансовая отчётность). Даже если сервис обещает удаление файлов, нет гарантий, что они не будут просканированы или сохранены на промежуточных серверах.

Если всё же решили использовать онлайн-инструмент, следуйте протоколу безопасности:

  • 🔒 Удалите из файла все лишние листы и столбцы с чувствительной информацией.
  • 📛 Замените реальные имена и идентификаторы на псевдонимы (например, вместо ФИО используйте «Клиент_1», «Клиент_2»).
  • 🚮 После конвертации очистите кэш браузера и историю загрузок.

Способ 4: Скрипты на Python (для автоматизации)

Для регулярной конвертации сотен файлов или интеграции в ETL-процессы оптимально использовать скрипты на Python с библиотеками pandas и xml.etree.ElementTree. Преимущества этого метода:

  • Автоматизация — обработка пакетов файлов по расписанию.
  • 🛠 Гибкость — настройка структуры XML под любую схему (XSD).
  • 🔄 Преобразования — очистка данных, замена форматов, добавление атрибутов на лету.

Пример скрипта для конвертации Excel в XML с вложенной структурой:

import pandas as pd

import xml.etree.ElementTree as ET

Чтение Excel

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

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

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

for _, row in df.iterrows():

item = ET.SubElement(root, "Запись")

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

ET.SubElement(item, "Наименование").text = row["Наименование"]

ET.SubElement(item, "Цена").text = str(row["Цена"])

Сохранение в файл

tree = ET.ElementTree(root)

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

Для работы со сложными схемами (например, когда один элемент XML соответствует нескольким строкам Excel) используйте библиотеку lxml:

from lxml import etree

schema = etree.XMLSchema(file="schema.xsd") # Загрузка схемы

xml_doc = etree.parse("output.xml")

if schema.validate(xml_doc):

print("XML соответствует схеме!")

else:

print("Ошибки:", schema.error_log)

Как обработать большие файлы (100+ МБ)?

Для файлов свыше 100 МБ используйте библиотеку dask вместо pandas, чтобы избежать переполнения памяти:

import dask.dataframe as dd

ddf = dd.read_excel("large_file.xlsx", engine="openpyxl")

Далее обрабатывайте данные порциями (chunk)

Также добавьте в скрипт логирование (logging), чтобы отслеживать прогресс обработки.

Способ 5: Специализированное ПО (для предприятий)

Крупным компаниям, которым требуется конвертация тысяч файлов в день с валидацией по XSD-схемам, подойдут профессиональные инструменты:

  • 🏢 Altova MapForce — визуальное проектирование преобразований Excel → XML с поддержкой XSLT.
  • 📦 Oxygen XML Editor — редактор с встроенными валидаторами и генераторами схем.
  • 🔄 Talend Open Studio — открытая платформа для ETL/ELT-процессов.

Сравнение функциональности:

ИнструментПоддержка XSDАвтоматизацияСтоимость
Altova MapForceДа (визуальный дизайнер)Да (сcheduling)От $499
Oxygen XMLДа (валидация в реальном времени)Через скриптыОт $488/год
Talend Open StudioДа (генерация XSD)Да (графический интерфейс)Бесплатно

⚠️ Внимание: При выборе ПО проверьте поддержку русскоязычных кодировок (например, windows-1251). Некоторые западные инструменты по умолчанию работают только с UTF-8, что приводит к кракозябрам в выходном XML.

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

Даже при использовании проверенных методов пользователи сталкиваются с проблемами. Вот топ-5 ошибок и их решения:

  1. Ошибка: «XML-карта не найдена» в Excel
    Причина: Файл .xsd не привязан к документу или удалён.
    Решение: Перейдите в Разработчик → Карта XML → Добавить и загрузите схему заново.
  2. Символы «&», «<», «>» заменяются на «&», «<», «>»
    Причина: XML требует экранирования специальных символов.
    Решение: Используйте CDATA для текстов с разметкой:
    <Описание><![CDATA[Текст с & и < символами]]></Описание>
  3. Потеря форматирования чисел (даты, валюты)
    Причина: Excel сохраняет только «сырые» значения.
    Решение: Преобразуйте данные в текстовый формат с нужными разделителями (например, 1 000,50 руб. вместо 1000.5).

  • 🔢 Пустых ячеек в заголовках столбцов.
  • 🔤 Специальных символов (особенно в именах тегов).
  • 📏 Столбцов с одинаковыми названиями (XML не допускает дублирующихся тегов на одном уровне).

-->

FAQ: Частые вопросы по конвертации Excel в XML

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

Нет, XML не сохраняет визуальное форматирование (цвета, шрифты, границы). Однако вы можете:

  • Сохранить данные о форматировании в отдельных тегах (например, <Ячейка ЦветФона="красный">).
  • Использовать XSLT для последующего применения стилей при отображении XML.
Как конвертировать несколько листов Excel в один XML-файл?

Вручную это сделать сложно — придётся объединять данные через Power Query или скрипт. Пример на Python:

sheets = pd.read_excel("file.xlsx", sheet_name=None)

root = ET.Element("Документ")

for sheet_name, df in sheets.items():

sheet_elem = ET.SubElement(root, sheet_name)

for _, row in df.iterrows():

ET.SubElement(sheet_elem, "Строка").text = str(row.to_dict())

Почему при импорте XML в 1С возникает ошибка «Несоответствие структуре»?

Это означает, что ваш XML не соответствует XSD-схеме, ожидаемой программой. Решения:

  • Получите актуальную схему у разработчиков 1С.
  • Проверьте XML через валидатор (например, xmlvalidation.com).
  • Исправьте имена тегов и атрибутов (регистр имеет значение!).
Как автоматизировать конвертацию для еженедельных отчётов?

Настройте планировщик задач (Windows) или cron (Linux/Mac) для запуска скрипта по расписанию. Пример для Python:

# Сохраните как convert.py

import schedule

import time

def convert():

# Ваш код конвертации здесь

print("Конвертация выполнена!", time.ctime())

schedule.every().monday.at("09:00").do(convert)

while True:

schedule.run_pending()

time.sleep(60)

Запускайте скрипт командой python convert.py.

Поддерживает ли Google Sheets экспорт в XML?

Нет, Google Sheets не имеет встроенного экспорта в XML. Обходные пути:

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

const sheet = SpreadsheetApp.getActiveSheet();

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

let xml = '\n<Данные>';

data.forEach(row => {

xml += `\n<Строка><Ячейка1>${row[0]}<Ячейка2>${row[1]}`;

});

xml += '\n';

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

}