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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Парсинг даних з Excel/CSV для імпорту в 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Парсинг даних з Excel/CSV для імпорту в 1С-Bitrix

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

Стандартний імпорт Bitrix та його обмеження

Вбудований імпорт товарів: Каталог → Імпорт з CSV. Працює з файлами UTF-8 або Windows-1251, очікує заголовки на кшталт NAME, PRICE, QUANTITY, XML_ID, PROPERTY_ARTICUL.

Проблема: реальні файли мають довільні заголовки («Найменування», «Ціна без ПДВ», «Арт.»), кілька рядків шапки, об'єднані ячейки, зведені аркуші та декоративні елементи на початку файлу.

Рішення: проміжний парсер, який перетворює вхідний файл на формат, який Bitrix готовий прийняти — або безпосередньо вносить дані через 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 «Кава мелена» → «kava-melena»
Обрізка до ліміту NAME до 255 символів
Пусті значення NULL або порожній рядок → значення за замовчуванням

Імпорт у каталог через API

Два підходи до запису даних у Bitrix:

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 днів