Ошибки данных при импорте CSV: почему возникают и как исправить
Семь способов, которыми аккуратный на вид файл врёт
Каждая из этих проблем приходит с правильным числом строк и без единого сообщения об ошибке.
Несовпадение кодировок — файл, записанный в Windows-1252 и прочитанный как UTF-8 (или наоборот), превращает «café» в «café», а тире — в три нечитаемых символа. Ничего не падает; значения просто становятся неверными — в тех столбцах, которые вы случайно не пролистали.
Разделитель — вовсе не запятая — большая часть континентальной Европы сохраняет CSV с точкой с запятой, потому что в этих локалях запятая используется как десятичный разделитель. Предположите не тот вариант — и получите один гигантский нераспознанный столбец или десятичную запятую цены, разбитую по несуществующим столбцам.
«Помощь» электронной таблицы перед экспортом — Excel хранит почтовый индекс, введённый как 01234, в виде числа 1234, а 16-значный штрихкод отображает в экспоненциальной записи, округлённой после 15 знаков. К моменту записи CSV исходное значение уже нигде не сохранилось.
Числа, которые значат два разных значения — 1.234,56 и 1,234.56 — это одна и та же сумма по двум региональным соглашениям. Прочитайте одно по правилам другого — и оно спокойно распарсится, но как 1.23 или как 1234560.
Заголовки, которые сдвигаются — экспорт добавляет или переставляет столбец, «postcode» становится «postal_code», а импортёр, сопоставляющий по позиции, тихо записывает описания в поля цены. Ничто в CSV не гарантирует, что столбец 4 дважды означает одно и то же.
Повторный импорт без устойчивого ключа — исправьте три строки, загрузите заново 2000, и импортёр без устойчивой идентичности для каждой записи создаст 2000 дублей вместо обновления трёх. Имена меняются; внешний идентификатор, артикул или номер заказа — нет.
Невидимые символы — неразрывный пробел, вставленный со страницы сайта, или "Blue " с пробелом в конце, выглядит идентично чистому значению, но проваливает любое точное сравнение — так одна и та же категория создаётся дважды, а проверка на дубли не срабатывает никогда.
Перед загрузкой: проверка, которая ловит большую часть таких случаев
Откройте файл один раз как обычный текст
Прежде чем доверять предпросмотру любого инструмента, откройте файл в обычном текстовом редакторе, а не в табличном: таблица переинтерпретирует файл в тот же момент, когда открывает его, и скрывает ровно те проблемы, которые вы ищете. Посмотрите на сырое начало первой строки — нет ли там чего-нибудь перед именем первого столбца.
Убедитесь, что разделитель именно тот, который вы предполагаете
Пересчитайте разделители глазами на нескольких разных строках. Файл, который на самом деле разделён точкой с запятой, но принят за разделённый запятыми, не покажет ни одной запятой за пределами самих значений — пятисекундная проверка, которая отлавливает целый класс сбоев ещё до их начала.
Проверьте одну строку с запятой, кавычкой и переносом строки
Найдите или намеренно создайте тестовую строку с запятой внутри текстового поля, с кавычкой и с многострочной заметкой, и убедитесь, что импортёр сохраняет каждый из них как одно поле, а не разбивает его. Одна эта строка проверяет ровно тот механизм, который при неверной обработке молча сдвигает все столбцы после неё.
Запустите небольшую партию перед всем файлом
Сначала десять или двадцать строк, проверенных по одной, выявляют системную ошибку сопоставления — перепутанную колонку, не ту валюту, неверный формат даты, — пока исправлять нужно десять строк, а не десять тысяч.
Решайте, что значит «готово», для каждой строки, а не для файла
Единственный вердикт «прошло/не прошло» для всего файла ничего не говорит о том, какие строки исправлять. Требуйте результат по каждой строке — создана, обновлена, пропущена, не удалась и почему, — прежде чем доверять импортёру что-то важное.
Почти всегда — несовпадение кодировок. Файл был записан в одной кодировке символов — обычно Windows-1252 или Latin-1 — и прочитан как UTF-8, либо наоборот. Пересохраните исходный файл явно в UTF-8 и проверьте, нужно ли убрать метку порядка байтов, в зависимости от того, чего ждёт импортёр.
Табличные редакторы сохраняют как число всё, что выглядит как число, а числа не хранят ведущие нули. Это произошло ещё до записи CSV — в момент, когда значение ввели или автоформатировали, — и восстановить его из одного лишь CSV нельзя: исходный столбец нужно отформатировать как текст, а не чинить постфактум.
У импортера не было устойчивого способа распознать строку в новом файле как «ту же запись», которую он уже сохранил, — скорее всего, потому что сопоставление шло по названию или описанию, а не по фиксированному идентификатору вроде внешней ссылки, номера заказа или SKU. Без такого устойчивого ключа каждый импорт выглядит как первый.
Это в той же мере проблема отчётности, что и проблема данных: хороший импортёр сообщает результат по каждой строке, а не только по файлу целиком. Если ваш инструмент выдаёт лишь одно «успешно/ошибка» на всю загрузку, воспринимайте это как повод тестировать небольшими партиями, пока не увидите результаты по строкам.
Почти всегда это путаница между десятичным разделителем и разделителем разрядов. 1.234,56 и 1,234.56 — это две допустимые записи одного и того же числа в разных региональных конвенциях, и чтение одной из них по правилам другой не даёт ошибки: просто получается неверное значение. Уточните, какую конвенцию использует ваш экспорт, и явно укажите её импортёру, а не оставляйте на угадывание.
Осторожно: открыть и пересохранить CSV в табличном редакторе — это ровно тот шаг, который порождает несколько описанных на этой странице проблем: ведущие нули, автоматическое преобразование дат, экспоненциальная запись. Если нужно вручную поправить несколько строк, обычный текстовый редактор безопаснее, чем полный круг через табличный редактор.
Как это устроено в Olmira
Модуль импорта файлов Olmira построен именно с учётом этого списка: строгий парсер RFC 4180, который справляется с запятыми в кавычках и переносами строк внутри значений, автоматическое удаление начального BOM в UTF-8, а слишком большие файлы отклоняются сразу, а не обрезаются молча. Строка, у которой число столбцов не совпадает с заголовком, падает сама по себе, не прерывая обработку остальных, а ключ дедупликации означает, что повторная загрузка одного и того же файла обновляет или пропускает существующие записи — по выбранной вами политике — вместо того, чтобы дублировать их.
Для каталогов товаров и услуг импорт по CSV добавляет построчный предпросмотр — включая любые поля, заполненные ИИ, чётко помеченные, — прежде чем сохранится хоть одна строка. Полная платформа коннекторов, с плановыми выгрузками и подписанными вебхуками наряду с импортом файлов, — на странице «Интеграции».