Клиентская спецификация в Excel почти никогда не выглядит как аккуратная таблица «артикул — количество — цена». Это рабочий файл, который прошёл через несколько рук: в нём есть шапка на три строки, объединённые ячейки, разделы, пустые строки-отбивки и итоги внизу. Задача разбора — достать из этого товарные строки, не потеряв ни одной и не приняв за товар заголовок раздела.
Почему нельзя просто попросить прислать «по шаблону»
Соблазн понятный: выложить на сайт форму нужного вида и обрабатывать только её. На практике это означает потерю части заявок.
У покупателя спецификация уже есть — её сформировал сметчик, выгрузила проектная программа или прислал конечный заказчик. Просьба переписать её в чужой шаблон — это просьба сделать чужую работу, и в условиях, когда та же спецификация ушла ещё четырём поставщикам, часть клиентов просто не станет этого делать.
Формат входа задаёт клиент. Всё, что можно сделать со своей стороны, — научиться читать то, что он прислал.
Что именно нужно найти в файле
Разбор решает четыре задачи, и решает их именно в таком порядке.
1. Найти таблицу
В листе может быть шапка компании, реквизиты, номер и дата — и только потом таблица. Признак начала таблицы — строка, после которой идут однотипные по структуре строки: там, где в одном столбце регулярно появляются числа, а в другом длинный текст.
2. Определить назначение столбцов
Заголовки пишут по-разному: «Кол-во», «Кол.», «Количество», «Q-ty». Опираться на точное совпадение названия бесполезно. Работают два сигнала одновременно:
- Заголовок столбца — по набору вариантов написания.
- Содержимое — столбец с целыми числами в диапазоне единиц-сотен скорее количество, чем цена; столбец с длинным текстом — наименование.
Когда сигналы противоречат друг другу, надёжнее содержимое: заголовок могли просто не поправить после копирования из другого файла.
3. Отделить товарные строки от служебных
| Тип строки | Признак |
|---|---|
| Товарная | есть наименование и количество |
| Раздел | есть только текст, часто выделен жирным |
| Итог | есть сумма, но нет количества либо есть слово «итого» |
| Отбивка | пустая |
Строки-разделы выбрасывать полностью не стоит: «Электроинструмент» перед следующими двадцатью позициями — это подсказка о категории, которая пригодится при подборе.
4. Разобрать саму строку наименования
Здесь начинается содержательная часть. В строке «УШМ 125мм 1200Вт с рег. оборотов или аналог» перемешаны тип товара, две числовые характеристики, свойство и оговорка о допустимости замены. Разбор вытаскивает из неё:
- тип: УШМ (углошлифовальная машина);
- диаметр: 125 мм;
- мощность: 1200 Вт;
- допустим аналог: да.
Последний пункт часто игнорируют, а он определяет, можно ли вообще предлагать замену по этой позиции.
Типичные ловушки
Объединённые ячейки. Наименование на две строки, количество — только в первой. Если читать построчно, вторая строка выглядит как товар без количества и уходит в мусор вместе с половиной названия.
Число как текст. «1 200» с неразрывным пробелом, «1,200», «1200 шт.» — всё это одно и то же количество, записанное так, что прямое преобразование в число даёт ошибку.
Единицы измерения в отдельном столбце. «шт», «компл», «м» — важны, потому что комплект из десяти штук и десять штук это разные заказы.
Несколько листов. Спецификация на объект нередко разбита по разделам на листы. Обработка только первого листа выглядит как успешная — и теряет две трети заявки.
PDF и сканы. Часть заявок приходит именно так. PDF с текстовым слоем разбирается почти как таблица, скан требует распознавания, и по нему разумно сразу планировать проверку менеджером.
Что делать со строками, которые не разобрались
Не выбрасывать. Строка, которую не удалось распознать, должна попасть в результат с пометкой «требует проверки» и исходным текстом. Иначе получается худший из возможных исходов: клиент прислал 200 позиций, в подборе их 180, и никто не знает, куда делись остальные двадцать.
Практическое правило: число строк на выходе всегда совпадает с числом товарных строк на входе. Меняется только их статус.
Как это проверить у себя
Возьмите пять последних настоящих заявок — не образцовых, а именно тех, что прислали клиенты, — и прогоните через выбранное решение. Смотреть нужно на три вещи:
- Совпадает ли количество распознанных строк с фактическим.
- Правильно ли определены количества и единицы измерения.
- Что произошло со строками-разделами и итогами.
Демонстрация на подготовленном файле не говорит ни о чём: аккуратную таблицу разберёт что угодно.
Коротко
- Требовать от клиента «правильный» шаблон — способ потерять часть заявок.
- Назначение столбцов надёжнее определять по содержимому, чем по заголовку.
- Служебные строки нужно отличать от товарных, но разделы полезно сохранять как подсказку о категории.
- Нераспознанная строка обязана попасть в результат с пометкой, а не исчезнуть.
- Проверять решение нужно на настоящих клиентских файлах, а не на демонстрационных.


