Как сделать YML-файл из Excel: полное руководство с примерами и шаблонами

Введение: зачем нужен YML и почему Excel?

Формат YML (Yandex Market Language) стал стандартом для обмена данными о товарах с Яндекс.Маркетом, Ozon и другими маркетплейсами. Но вручную создавать такой файл — мучительное занятие, особенно если у вас тысячи позиций. Здесь на помощь приходит Excel: его табличная структура идеально подходит для подготовки данных перед конвертацией.

Проблема в том, что прямого экспорта из Excel в YML нет. Нужно либо использовать промежуточные форматы (CSV, XML), либо писать скрипты. В этой статье разберём все рабочие способы 2026 года — от ручного редактирования до автоматизации через Power Query и макросы. Вы узнаете, как избежать типичных ошибок (например, некорректных тегов <currency> или <categoryId>), которые приводит к отказу маркетплейсов принимать ваш фид.

Важно: если вы работаете с Google Таблицами, принципы те же, но инструменты другие — об этом отдельный раздел в конце статьи.

1. Подготовка данных в Excel: структура и обязательные поля

Прежде чем конвертировать, нужно привести таблицу к виду, который поймёт YML. Маркетплейсы требуют строгой структуры: отсутствие лишних столбцов, корректные названия полей и обязательные атрибуты. Вот минимальный набор колонок, которые должны быть в вашем Excel:

  • 📌 id — уникальный идентификатор товара (только цифры или буквы латиницы)
  • 🏷️ name — название товара (максимум 255 символов, без HTML-тегов)
  • 💰 price — цена в числовом формате (без валюты, только цифры)
  • 📦 categoryId — ID категории из классификатора Яндекса
  • 📎 url — ссылка на товар на вашем сайте (с https://)
  • 📷 picture — URL главного изображения (минимум 1, максимум 10)

Дополнительные поля (необязательные, но рекомендуемые): vendor, model, description, param (характеристики). Обратите внимание: Яндекс.Маркет требует, чтобы поле description содержало не менее 30 символов и не было копией названия.

Поле в YML Название столбца в Excel Тип данных Обязательно?
<id> ID Текст/число Да
<name> Название Текст Да
<price> Цена Число Да
<categoryId> Категория_Yandex Число Да
<picture> Фото_1 Текст (URL) Да (хотя бы 1)

⚠️ Внимание: Если в вашем Excel есть ячейки с формулами (например, =B2*1.2 для наценки), обязательно преобразуйте их в значения перед экспортом. Для этого выделите диапазон, скопируйте (Ctrl+C), затем выполните Правка → Специальная вставка → Значения.

2. Способ 1: Конвертация через CSV + онлайн-конвертер

Самый простой метод для новичков — экспортировать данные из Excel в CSV, а затем преобразовать в YML с помощью бесплатных сервисов. Подходит для фидов до 5 000 товаров.

Шаги:

  1. В Excel нажмите Файл → Сохранить как и выберите формат CSV (разделители — запятые).
  2. Откройте один из онлайн-конвертеров:

Пример формулы для пользовательского столбца с валютой:

= "<currencyId>RUR</currencyId><categories><category id="" & Text.From([categoryId]) & "">" & [Категория] & "</category></categories>"
Как добавить несколько валют?

Если вы работаете с мультивалютными фидами, в Power Query можно создать условный столбец:

= if [Валюта] = "USD" then "<currencyId>USD</currencyId>" else "<currencyId>RUR</currencyId>"

Но помните: Яндекс.Маркет принимает только рубли (RUR) или тенге (KZT) для казахстанских продавцов.

⚠️ Внимание: Power Query не генерирует полноценный YML — он только подготавливает данные. Для финального XML-представления потребуется дополнительная обработка (например, через XSLT или макрос).

4. Способ 3: Макросы VBA для продвинутых пользователей

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

Пример макроса для генерации YML:

Sub GenerateYML()

Dim ws As Worksheet

Dim rowCount As Long, i As Long

Dim ymlContent As String

Set ws = ThisWorkbook.Sheets("Товары") ' имя вашего листа

rowCount = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

' Заголовок YML

ymlContent = "" & vbCrLf

ymlContent = ymlContent & "" & vbCrLf

ymlContent = ymlContent & "" & vbCrLf

ymlContent = ymlContent & " " & vbCrLf

ymlContent = ymlContent & " " & ws.Range("B1").Value & "" & vbCrLf ' название магазина

ymlContent = ymlContent & " " & ws.Range("C1").Value & "" & vbCrLf

ymlContent = ymlContent & " " & ws.Range("D1").Value & "" & vbCrLf

ymlContent = ymlContent & " " & vbCrLf

ymlContent = ymlContent & " " & vbCrLf

ymlContent = ymlContent & " " & vbCrLf

ymlContent = ymlContent & " " & vbCrLf

' Добавьте категории здесь

ymlContent = ymlContent & " " & vbCrLf

ymlContent = ymlContent & " " & vbCrLf

' Данные товаров

For i = 2 To rowCount

ymlContent = ymlContent & " " & vbCrLf

ymlContent = ymlContent & " " & ws.Cells(i, 2).Value & "" & vbCrLf

ymlContent = ymlContent & " " & ws.Cells(i, 3).Value & "" & vbCrLf

ymlContent = ymlContent & " " & ws.Cells(i, 4).Value & "" & vbCrLf

ymlContent = ymlContent & " " & ws.Cells(i, 5).Value & "" & vbCrLf

ymlContent = ymlContent & " " & ws.Cells(i, 6).Value & "" & vbCrLf

ymlContent = ymlContent & " " & vbCrLf

Next i

ymlContent = ymlContent & " " & vbCrLf

ymlContent = ymlContent & " " & vbCrLf

ymlContent = ymlContent & ""

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

Dim filePath As String

filePath = Environ("USERPROFILE") & "\Desktop\feed.yml"

Open filePath For Output As #1

Print #1, ymlContent

Close #1

MsgBox "YML-файл создан на рабочем столе!", vbInformation

End Sub

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

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Настройте имена листа и столбцов под вашу таблицу.
  4. Запустите макрос кнопкой F5.
  5. 5. Типичные ошибки и как их избежать

    Даже опытные пользователи сталкиваются с проблемами при загрузке YML на маркетплейсы. Вот самые распространённые ошибки и их решения:

    • Некорректная кодировка → Сохраняйте файл в UTF-8 без BOM (используйте Notepad++ или VS Code для проверки).
    • Отсутствует обязательное поле → Проверьте, что все товары имеют id, price и categoryId.
    • Неверный формат цены → Цена должна быть числом без разделителей (например, 1999.99, а не 1 999,99 руб.).
    • Дублирующиеся ID → Используйте функцию =COUNTIF(A:A, A2), чтобы найти повторяющиеся идентификаторы.
    • Невалидные URL → Убедитесь, что все ссылки начинаются с http:// или https:// и не содержат пробелов.

    Для проверки готового YML используйте:

6. Альтернативы: Google Таблицы и специализированные программы

Если вы работаете в Google Таблицах, процесс будет аналогичным, но с другими инструментами:

  1. Используйте Файл → Скачать → CSV для экспорта.
  2. Для автоматизации применяйте Google Apps Script (аналог VBA). Пример скрипта для генерации YML:
    function generateYML() {
    

    const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Товары");

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

    let yml = '\n\n\n';

    data.forEach((row, i) => {

    if (i === 0) return; // пропускаем заголовки

    yml += `\n`;

    yml += ` ${row[1]}\n`;

    yml += ` ${row[2]}\n`;

    yml += `\n`;

    });

    yml += '\n';

    DriveApp.createFile('feed.yml', yml, 'text/xml');

    }

Специализированные программы для работы с YML:

  • 💻 1C:Предприятие (модуль "Обмен данными с Яндекс.Маркет").
  • 💻 МойСклад (автоматический экспорт фидов).
  • 💻 LitCommerce (для мультимаркетплейсовых решений).

7. Оптимизация YML для Яндекс.Маркета: секреты успешной загрузки

Чтобы ваш фид прошёл модерацию с первого раза, следуйте этим рекомендациям:

  • 📈 Категории: Используйте актуальный классификатор Яндекса (скачать можно здесь). Ошибка в categoryId — самая частая причина отказа.
  • 🖼️ Изображения: Размер не менее 800×800 px, формат JPEG/PNG, вес до 10 МБ. Яндекс блокирует фиды с битыми ссылками на фото.
  • 📝 Описания: Должны быть уникальными для каждого товара. Копипаст из названия или других сайтов приведёт к понижению в выдаче.
  • 🔄 Обновления: Яндекс рекомендует обновлять фид не реже 1 раза в сутки. Для этого настройте автоматическую выгрузку через cron (Linux) или Планировщик задач (Windows).

Для ускорения индексации добавьте в YML теги:

  • <sales_notes> — условия продажи (например, "Доставка по России бесплатно").
  • <delivery> — информация о доставке (обязательно для некоторых категорий).
  • <pickup> — возможность самовывоза.

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

Можно ли создать YML из Excel без программирования?

Да, для этого подойдёт Способ 1 (CSV + онлайн-конвертер) или Способ 2 (Power Query). Оба метода не требуют знания кода, но имеют ограничения по размеру файла (обычно до 10 000 товаров). Для больших каталогов придётся использовать макросы или специализированное ПО.

Как добавить несколько фотографий для одного товара?

В YML фотографии перечисляются внутри тега <picture> через запятую:

<picture>https://site.ru/photo1.jpg</picture>

<picture>https://site.ru/photo2.jpg</picture>

В Excel для этого нужно создать отдельные столбцы (например, Фото_1, Фото_2) и объединить их при конвертации.

Почему Яндекс.Маркет не принимает мой YML?

Самые частые причины:

  1. Несоответствие структуры (отсутствует обязательный тег, например, <currencies>).
  2. Некорректные символы в названиях или описаниях (например, & вместо &amp;).
  3. Невалидные categoryId (устаревшие или несуществующие категории).
  4. Превышен лимит по размеру файла (максимум 50 МБ для Яндекса).

Используйте валидатор Яндекса для точной диагностики.

Как автоматизировать обновление YML при изменении цен в Excel?

Настройте триггеры:

  • В Excel: Макрос с таймером (Application.OnTime).
  • В Google Таблицах: Триггер в Google Apps Script (Time-driven).
  • На сервере: cron-задача для запуска скрипта конвертации (например, на Python).

Пример для VBA:

Sub ScheduleUpdate()

Application.OnTime Now + TimeValue("01:00:00"), "GenerateYML" ' запуск через час

End Sub

Можно ли в YML указать скидки или акции?

Да, для этого используйте теги:

<oldprice>2999</oldprice>  

<price>1999</price>

<sales_notes>Скидка 33% до 31.12.2026</sales_notes>

Убедитесь, что oldprice больше price, иначе Яндекс заблокирует фид.