Парсинг данных из Excel/CSV для импорта в 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Парсинг данных из Excel/CSV для импорта в 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1165
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    563
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    743
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Парсинг данных из Excel/CSV для импорта в 1С-Битрикс

Стандартный импорт 1С-Битрикс через CSV требует строго определённой структуры файла: конкретные заголовки столбцов, конкретная кодировка, конкретный разделитель. Файлы от контент-менеджеров, 1С, поставщиков и маркетологов этим требованиям не отвечают. Задача парсинга — взять произвольный Excel или CSV и привести его к структуре, пригодной для импорта в каталог.

Стандартный импорт Битрикс и его ограничения

Встроенный импорт товаров: Каталог → Импорт из CSV. Работает с файлами UTF-8 или Windows-1251, ожидает заголовки вида NAME, PRICE, QUANTITY, XML_ID, PROPERTY_ARTICUL.

Проблема: реальные файлы имеют произвольные заголовки («Наименование», «Цена без НДС», «Арт.»), несколько строк шапки, объединённые ячейки, сводные листы и декоративные элементы в начале файла.

Решение: промежуточный парсер, который преобразует входной файл в формат, который Битрикс готов принять — или напрямую вносит данные через API.

Библиотека PhpSpreadsheet

PhpSpreadsheet — стандартный инструмент для чтения Excel в PHP:

use PhpOffice\PhpSpreadsheet\IOFactory;

$spreadsheet = IOFactory::load('/path/to/file.xlsx');
$sheet = $spreadsheet->getActiveSheet();
$rows = $sheet->toArray();

Для больших файлов (> 10 000 строк) использовать режим ReadFilter — читать только нужные столбцы и строки, без загрузки всего файла в память.

Особенности Excel, которые ломают наивный парсинг:

  • Числа с форматированием (1 000,50 вместо 1000.50) — убирать пробелы, заменять запятую на точку.
  • Даты хранятся как числа (серийные даты Excel) — нужна конвертация.
  • Объединённые ячейки — значение только в первой ячейке диапазона.
  • Скрытые строки и листы — игнорировать.

Маппинг столбцов: подход с конфигурацией

Вместо hardcode «столбец A — это название» создаём маппинг в конфигурации:

$mapping = [
    'NAME'        => 'Наименование товара',  // заголовок в файле
    'XML_ID'      => 'Артикул',
    'PRICE'       => 'Цена без НДС',
    'QUANTITY'    => 'Остаток',
    'SECTION'     => 'Категория',
];

Парсер находит строку заголовков (автоматически или по номеру строки), сопоставляет с маппингом и читает данные.

Автоопределение строки заголовков: сканировать первые 10 строк, найти ту, где больше всего совпадений с ключами маппинга.

Трансформация данных

Данные из Excel редко готовы к прямому импорту. Типовые трансформации:

Трансформация Пример
Очистка строки « Название товара » → «Название товара»
Конвертация чисел «1 250,00 руб.» → 1250.00
Нормализация единиц «шт.», «шт», «Штука» → единый ID ЕИ
Транслитерация для CODE «Кофе молотый» → «kofe-molotyi»
Обрезка до лимита NAME до 255 символов
Пустые значения NULL или пустая строка → значение по умолчанию

Импорт в каталог через API

Два подхода к записи данных в Битрикс:

1. Через CIBlockElement (классический API):

$el = new CIBlockElement();
$result = $el->Add([
    'IBLOCK_ID'  => $iblockId,
    'NAME'       => $row['NAME'],
    'CODE'       => $row['CODE'],
    'XML_ID'     => $row['XML_ID'],
    'ACTIVE'     => 'Y',
    'PROPERTY_VALUES' => [
        'ARTICUL' => $row['XML_ID'],
    ],
]);

2. Через D7 ORM (\Bitrix\Iblock\ElementTable) — только для чтения; запись сложнее, для товаров лучше CIBlockElement.

Для обновления существующих товаров — сначала найти по XML_ID, затем $el->Update($id, $fields).

CSV: типичные проблемы

Кодировка. Файлы из 1С приходят в Windows-1251. Перед обработкой: iconv('Windows-1251', 'UTF-8', $content).

Разделитель. Автоопределение: считать количество запятых и точек с запятой в первой строке — чаще встречающийся — разделитель.

Переносы строк внутри ячейки. В CSV значение с переносом берётся в кавычки. fgetcsv() корректно обрабатывает, но только если файл нет проблем с кодировкой кавычек.

Сроки разработки

Вариант Состав Срок
Разовый импорт Скрипт под один файл 1 день
Настраиваемый импортер Маппинг через конфиг, несколько форматов 3-4 дня
Полная система UI для загрузки файлов, просмотр до импорта, история 6-8 дней