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

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

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

Типичные сценарии конвертации:

  • 📊 Интеграция с CRM/ERP — передача прайс-листов, справочников контрагентов или заказов в корпоративные системы типа SAP или Bitrix24.
  • 🌐 API-запросы — подготовка данных для отправки через REST/SOAP (например, выгрузка товаров на маркетплейсы вроде Ozon или Wildberries).
  • 📁 Архивирование — долгосрочное хранение таблиц в универсальном формате, не зависящем от версии Microsoft Office.

Важно понимать, что не всякий Excel-файл можно корректно конвертировать в XML. Проблемы возникают с:

  • 🔄 Объединёнными ячейками — XML не поддерживает слияние, поэтому данные придётся дублировать или переписывать структуру.
  • 🎨 Сложным форматированием — цвета, шрифты и границы теряются при конвертации (если не использовать специализированные схемы вроде SpreadsheetML).
  • 📈 Формулами — в XML сохранятся только значения, а не сами вычисления (например, =СУММ(A1:A10) станет просто числом).
📊 Для чего вам нужна конвертация Excel в XML?
Интеграция с 1С/ERP
Загрузка на маркетплейс
Архивирование данных
Другой вариант

Способ 1: Сохранение в XML прямо из Excel (встроенная функция)

Самый простой метод — использовать встроенный экспорт Microsoft Excel (доступен с версии 2007 и новее). Он подходит для файлов до 10 000 строк и не требует дополнительного ПО. Алгоритм:

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

⚠️ Внимание: Если в данных есть специальные символы (например, &, <, >), Excel автоматически заменит их на XML-сущности (&, <, >). Однако кириллические символы в именах столбцов могут привести к ошибке — лучше переименовать их на латиницу заранее.

Удалить объединённые ячейки|Заменить формулы на значения (Ctrl+C → Специальная вставка → Значения)|Переименовать столбцы на английский|Проверить на специальные символы (&, <, >)|Сохранить копию оригинального файла-->

Пример получившегося XML (фрагмент):

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

<Table1>

<Row>

<ID>1</ID>

<Name>Товар А</Name>

<Price>1200.50</Price>

</Row>

<Row>

<ID>2</ID>

<Name>Товар Б</Name>

<Price>850.00</Price>

</Row>

</Table1>

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

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

  • 📋 Нужно объединить несколько таблиц в один XML.
  • 🔄 Требуется преобразовать формат (например, развернуть сводную таблицу в плоскую структуру).
  • 🧹 Необходимо очистить данные (удалить пустые строки, исправить ошибки).

Инструкция:

  1. Перейдите на вкладку Данные → Получить данные → Из других источников → Пустой запрос.
  2. В редакторе Power Query введите команду:
    = Excel.CurrentWorkbook{[Name="Таблица1"]}[Content]

    (замените Таблица1 на имя вашего диапазона).

  3. Трансформируйте данные (например, добавьте столбец с формулой = Number.From([Цена]) * 1.2 для наценки 20%).
  4. Нажмите Закрыть и загрузить в... → Только создать подключение.
  5. Вернитесь в Данные → Получить данные → Запустить запрос → Экспортировать в файл → XML.

⚠️ Внимание: Power Query не сохраняет иерархические структуры (например, вложенные таблицы). Для таких случаев потребуется XSLT-преобразование (см. Способ 4).

Способ 3: Онлайн-конвертеры — быстро, но с ограничениями

Если у вас нет доступа к Excel или нужно сконвертировать файл на Mac/Linux, можно воспользоваться онлайн-сервисами. Популярные варианты:

Сервис Макс. размер файла Поддержка формул Приватность
Zamzar 50 МБ ❌ (только значения) Файлы удаляются через 24 часа
ConvertCSV 10 МБ ✅ (опционально) Шифрование TLS 1.2
AConvert 200 МБ Удаление через 2 часа

Алгоритм работы на примере ConvertCSV:

  1. Загрузите файл .xls или .xlsx на сайт.
  2. Укажите параметры:
    • 🔘 First row as header — использовать первую строку как имена тегов.
    • 🔘 Root element name — название корневого элемента (например, Products).
    • 🔘 Row element name — тег для строк (например, Item).
  • Нажмите Convert to XML и скачайте результат.
  • Что делать если онлайн-сервис не принимает файл?

    Если файл больше лимита сервиса, разбейте его на части с помощью Excel (Данные → Разделить лист) или используйте Python-скрипт (см. Способ 5). Также проверьте, что файл не защищён паролем — большинство онлайн-конвертеров не поддерживают расшифровку .xlsx с защитой.

    ⚠️ Внимание: Онлайн-конвертеры не гарантируют сохранность данных. Для конфиденциальной информации (например, клиентские базы) используйте локальные методы (Способы 1, 2, 4 или 5).

    Способ 4: XSLT-преобразование для продвинутых пользователей

    Если требуется точный контроль над структурой XML (например, для соответствия XSD-схеме), используйте XSLT (eXtensible Stylesheet Language Transformations). Этот метод позволяет:

    • 🔄 Трансформировать иерархические данные (например, преобразовать сводную таблицу в вложенные теги).
    • 📌 Добавлять атрибуты (например, <Product id="123" category="electronics">).
    • 🧹 Фильтровать строки по условию (например, экспортировать только товары с ценой > 1000).

    Пример XSLT для преобразования Excel (предварительно сохранённого как XML через Способ 1) в кастомную структуру:

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

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="/Table1">

    <Catalog>

    <xsl:for-each select="Row">

    <Product id="{ID}">

    <Name><xsl:value-of select="Name"/></Name>

    <Price currency="RUB"><xsl:value-of select="Price"/></Price>

    </Product>

    </xsl:for-each>

    </Catalog>

    </xsl:template>

    </xsl:stylesheet>

    Чтобы применить XSLT:

    1. Сохраните XSLT-код в файл transform.xsl.
    2. Используйте любой XSLT-процессор (например, Saxon или встроенный в Oxygen XML Editor):
      java -jar saxon-he-11.4.jar -s:input.xml -xsl:transform.xsl -o:output.xml

    Способ 5: Автоматизация через Python (для больших файлов)

    Если файл содержит более 100 000 строк или требуется пакетная обработка, оптимально использовать Python с библиотеками pandas и xml.etree.ElementTree. Преимущества метода:

    • Высокая скорость — обработка миллиона строк за несколько секунд.
    • 🔄 Гибкость — можно добавлять логику (например, разбивать файл на части по 10 000 строк).
    • 📁 Автоматизация — интеграция в Airflow или cron для регулярного экспорта.

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

    import pandas as pd
    

    import xml.etree.ElementTree as ET

    Чтение Excel

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

    Создание XML-структуры

    root = ET.Element("Products")

    for _, row in df.iterrows:

    product = ET.SubElement(root,"Product", id=str(row["ID"]))

    ET.SubElement(product,"Name").text = row["Name"]

    ET.SubElement(product,"Price").text = str(row["Price"])

    Сохранение

    tree = ET.ElementTree(root)

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

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

    1. Установите Python 3.8+ и библиотеки:
      pip install pandas openpyxl
    2. Сохраните код в файл convert.py и запустите:
      python convert.py
    import dask.dataframe as dd
    

    ddf = dd.read_excel("huge_file.xlsx")

    Она разбивает данные на части и обрабатывает их параллельно.-->

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

    Даже при правильной конвертации результат может оказаться некорректным. Рассмотрим распространённые проблемы и решения:

    Ошибка Причина Решение
    XML не валидируется по XSD Несовпадение структуры (например, отсутствует обязательный тег) Используйте XSLT для трансформации или правьте XSD-схему
    Кириллические символы отображаются как"???" Неверная кодировка (например, Windows-1251 вместо UTF-8) Укажите кодировку при сохранении: encoding="utf-8"
    Данные в XML"смещены" (столбцы не совпадают с тегами) В Excel есть скрытые столбцы или пустые ячейки в первой строке Удалите скрытые столбцы и заполните пустые ячейки в заголовке
    Ошибка"Too many levels of nesting" Слишком глубокая вложенность тегов (например, >10 уровней) Упростите структуру или разбивайте XML на несколько файлов

    ⚠️ Внимание: Если вы экспортируете данные для , проверьте, что:

    • 📌 Атрибут xmlns соответствует требуемой схеме (например, xmlns="http://v8.1c.ru/8.2/data-enterprise").
    • 📌 Числовые значения записаны с точкой как разделителем (1200.50, а не 1 200,50).
    • 📌 Даты в формате YYYY-MM-DD (например, 2023-12-31).

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

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

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

    • SpreadsheetML (встроенный формат Excel XML).
    • Office Open XML (для файлов .xlsx, которые по сути являются ZIP-архивом с XML внутри).

    Для восстановления форматирования при обратном импорте в Excel потребуется XSLT-стиль или макрос VBA.

    Как конвертировать Excel в XML на Mac?

    На macOS доступны все перечисленные методы, кроме встроенного экспорта в Excel для Mac (там нет опции XML-данные). Альтернативы:

    1. Используйте Power Query (доступен в Excel 2016+ для Mac).
    2. Установите LibreOffice — в нём есть экспорт в XML через Файл → Экспорт в формат XML.
    3. Запустите Python-скрипт (см. Способ 5) или используйте Terminal с инструментами вроде ssconvert:
      ssconvert input.xlsx output.xml
    Что делать, если XML не импортируется в 1С?

    Проблема обычно связана с несоответствием структуры XML и XSD-схемы 1С. Проверьте:

    1. Сопоставление тегов: имена в XML должны точно именам в XSD (с учётом регистра!).
    2. Типы данных: например, 1С может ожидать <Price>1200.50</Price>, а получает <Price>1 200,50</Price>.
    3. Кодировку: 1С часто требует Windows-1251, а не UTF-8.

    Для диагностики используйте валидатор вроде XML Validation, загрузив туда ваш XML и XSD от 1С.

    Как разбить большой XML-файл на части?

    Если файл превышает лимиты системы (например, >50 МБ для загрузки на маркетплейс), разбивайте его с помощью:

    • Excel + Power Query: фильтруйте данные по диапазону строк (например, 1-10000, 10001-20000) и экспортируйте каждый диапазон отдельно.
    • Python: используйте библиотеку xml.etree.ElementTree с пагинацией:
      chunk_size = 10000
      

      for i in range(0, len(df), chunk_size):

      chunk = df[i:i+chunk_size]

      # Сохранение чанка в отдельный XML

    • XSLT 2.0: воспользуйтесь функцией fn:subsequence для разбивки.
    Можно ли автоматизировать конвертацию для регулярных задач?

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

    • 📅 Планировщик задач Windows + Python-скрипт (см. Способ 5).
    • ⚙️ 1С:Enterprise — настройте регламентное задание с выгрузкой в XML.
    • ☁️ Облачные сервисы вроде Zapier или Make (ex-Integromat) для связки Excel → XML → API.

    Пример батч-файла для Windows:

    @echo off
    

    python C:\scripts\convert.py

    move /Y output.xml \\server\shared\imports\