Все статьи
24 сентября 2026 г.10 мин чтения

Предпросмотр импорта CSV: как найти ошибки до загрузки таблицы

Предпросмотр импорта CSV: как найти ошибки до загрузки таблицы

Предпросмотр CSV помогает проверить данные до того, как они попадут в рабочую таблицу. Покажите пользователю распознанные столбцы, несколько строк, найденные несоответствия и их последствия: что будет импортировано, что пропущено и что нужно исправить. Хороший экран предварительной проверки не обещает «чистый файл» по одному зелёному значку, а даёт конкретный маршрут от выбора файла до безопасной загрузки.

Для чего нужен предварительный просмотр

Импорт CSV переносит данные из одного приложения в другое, но один и тот же файл может быть прочитан по-разному. Запятая внутри адреса способна выглядеть как разделитель столбцов, дата — трактоваться в другом порядке, а начальные нули в коде товара — исчезнуть после автоматического распознавания числа. Предпросмотр делает такие решения видимыми до записи в базу, когда исправление ещё не затрагивает рабочие записи.

Полезный результат проверки отвечает на четыре вопроса: какие столбцы увидит система, какие поля назначения им соответствуют, сколько строк можно загрузить и что случится с проблемными строками. Если интерфейс показывает только первые пять строк без итогов проверки, он демонстрирует вид файла, но не помогает оценить последствия импорта. Пользователь должен понимать границы проверки: проверено ли всё содержимое или только образец строк.

Сначала распознайте структуру файла

После выбора файла покажите его имя и размер, затем обозначьте предположенную кодировку, разделитель и наличие заголовка. Эти параметры не обязательно выносить в техническую панель по умолчанию: можно сообщить коротко, например «Разделитель — точка с запятой; первая строка используется как заголовок». Рядом дайте возможность изменить настройку, если колонка очевидно разбита неверно.

Если система не может надёжно определить разделитель, не выбирайте его молча. Покажите короткий фрагмент в нескольких колонках и предложите переключатель между распространёнными вариантами, а также вариант «другой». При смене разделителя сразу обновляйте превью: человек должен видеть, почему колонок стало больше или меньше. Если первые строки файла содержат комментарий или пустую строку до заголовка, предложите явно отметить строку заголовков, вместо того чтобы заставлять пользователя удалять её в стороннем редакторе.

Перед показом значений проверьте, что ширина и переносы не скрывают смысл. Длинное название можно сократить визуально, сохраняя полный текст по наведению или в доступном раскрытии; точный код не следует обрезать так, чтобы невозможно было сверить его с источником. Горизонтальная прокрутка допустима, если пользователь понимает, что правее есть другие поля. На узком экране лучше показывать строку как карточку с парами «поле — значение», а не сжимать таблицу до нечитаемых колонок.

Сопоставьте колонки с полями назначения

Найденные заголовки файла нужно сопоставить с полями целевой таблицы: например, «Артикул» — с кодом товара, «Имя клиента» — с именем, «Дата заказа» — с датой. Предложенное автоматикой соответствие показывайте до загрузки, а неподтверждённые поля отмечайте явно. Не считайте похожее название доказательством совпадения: колонка «Номер» может обозначать идентификатор заказа, счёт или телефон.

Для каждого целевого поля полезно сообщить одно из трёх состояний: сопоставлено, не сопоставлено или пропускается. Если важное обязательное поле не связано ни с одной колонкой, кнопку продолжения следует сопровождать объяснением, чего не хватает. Если поле необязательно, дайте выбрать «оставить пустым». Неизвестные исходные колонки тоже не нужно скрывать: сообщите, что они будут пропущены, и позвольте вернуться к сопоставлению. Иначе пользователь может обнаружить потерю данных уже после импорта.

Конвертацию типов показывайте там, где она влияет на данные. Например, код `00127` может быть идентификатором, а не числом 127; дата `04.05.2026` может означать четвёртое мая или пятое апреля в зависимости от принятого формата. Предложите тип поля и формат, покажите исходное значение рядом с интерпретацией, а не подменяйте исходник сразу. Для чисел и денежных сумм сообщите, какой десятичный разделитель используется, если исходный и целевой форматы различаются.

Разделите ошибки и предупреждения

Ошибка означает, что строку нельзя безопасно загрузить без исправления или явного решения: отсутствует обязательный идентификатор, дата не существует, число невозможно преобразовать, а уникальный ключ уже занят. Предупреждение сообщает о допустимом, но требующем внимания результате: незнакомое дополнительное поле будет пропущено, необязательное значение пусто, либо текст будет обрезан правилами целевого поля. Не сводите оба случая к красной надписи «Ошибка импорта».

Сообщение должно называть строку и поле, описывать найденное значение и подсказывать следующий шаг. Вместо «Некорректная запись» пишите: «Строка 18, поле “Дата заказа”: “31.02.2026” не является календарной датой». Вместо «Нет данных» — «В строке 42 пустой артикул; добавьте значение или исключите строку». В превью можно подсветить проблемную ячейку, но сообщение должно оставаться доступным и вне цвета, чтобы его можно было прочитать с экранным диктором.

Пользователь должен различать блокирующие проблемы, предупреждения и информационные замечания. Число строк в каждом состоянии поставьте рядом с кратким описанием: «1 240 строк готовы, 12 требуют исправления, 3 будут пропущены». Клик по счётчику переводит к соответствующему фильтру в списке. Не сообщайте об ошибке только внизу длинного файла, где её легко не заметить.

Дайте исправить или исключить проблемные строки

Для небольшой ошибки полезно встроенное исправление: пользователь может указать правильную дату, выбрать поле назначения или исключить строку. В этом случае сохраняйте исходное значение доступным для сравнения и явно маркируйте внесённую правку как локальную до завершения импорта. Если в системе нет безопасного редактирования, предложите скачать список проблем с номером строки и причиной, исправить CSV и загрузить его снова. Не создавайте впечатление, что таблица уже изменилась.

Поддержите фильтры «Все строки», «Готовы», «С предупреждениями» и «С ошибками». При длинном файле пользователь должен иметь возможность искать по значению и переходить между проблемами, не теряя позицию. Показывайте номер исходной строки: номер видимой строки после сортировки или фильтрации может не совпадать с номером строки файла. Если пользователь исключает записи, обновляйте счётчики и кратко сообщайте, сколько строк останется к импорту.

Не превращайте предварительный просмотр в обязательное исправление всего, что система считает необычным. Например, пустое необязательное поле может быть правильным, а значение с ведущими нулями может быть идентификатором. Позвольте принять предупреждение там, где это допустимо, но объясните результат. Блокировать продолжение следует только тогда, когда запись без решения создаёт риск потери, неверной связи или нарушения ограничений целевой таблицы.

Покажите итог и границы проверки

Перед подтверждением соберите краткое резюме: сколько строк будет добавлено, обновлено, пропущено или отклонено; какие поля будут заполнены; какие предупреждения остаются. Если импорт может обновить существующие записи, отдельно покажите, по какому ключу определяется совпадение. Слова «обновить 240 записей» должны быть заметны до запуска, а не появляться в журнале после операции.

Дайте понять, проверялся ли полный файл. Если система анализирует только часть строк для быстрого превью, назовите это прямо и запустите полную проверку перед импортом. Не обещайте, что все ошибки исключены, если проверялись лишь образцы. Во время длительной проверки сообщайте, что процесс продолжается, и не позволяйте повторно отправить тот же файл в результате двойного клика.

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

Пример: каталог с товарами

Представим, что менеджер загружает CSV с названием, артикулом, ценой и остатком. В файле 250 строк, одна строка содержит цену `1 299,50`, а в другом поле артикул `00048`. Если система считает всё числом без учёта назначения поля, цена может не распознаться, а артикул лишится нулей. Поэтому в сопоставлении артикул выбирается как текстовый идентификатор, цена — как денежное значение с запятой в роли десятичного разделителя.

Проверка находит, что у трёх строк отсутствует артикул, а две строки содержат отрицательный остаток. В верхней сводке показывается, что 245 записей готовы, три блокируются отсутствием обязательного ключа, две требуют подтверждения допустимости отрицательного остатка. Менеджер открывает проблемные записи, исключает строки без артикула и исправляет остаток только после сверки с источником. Итог перед загрузкой теперь сообщает, сколько записей будет добавлено, а после обработки сравнивает этот результат с фактом.

В этом сценарии предварительный просмотр не пытается решить коммерческий вопрос о том, может ли магазин хранить отрицательные остатки. Он выявляет расхождение с настроенным типом и даёт выбрать действие по правилам бизнеса. Если отрицательное значение допустимо как резерв, его можно принять; если нет — строка должна быть исправлена или исключена. Такая граница сохраняет контроль за владельцем данных, а не скрывает бизнес-решение внутри автоматического преобразования.

Чек-лист перед выпуском импорта

  • Превью показывает, использован ли заголовок и как определён разделитель.
  • Пользователь может исправить неверное распознавание структуры до записи данных.
  • Каждая колонка сопоставляется с полем назначения или явно помечается как пропускаемая.
  • Формат даты, числа и идентификатора объяснён, если возможна неоднозначность.
  • Ошибки и предупреждения различаются по смыслу, а не только по цвету.
  • В каждой проблеме видны исходный номер строки, поле и объяснение.
  • Доступны фильтры по готовым, проблемным и предупреждённым строкам.
  • Исправление или исключение строки меняет счётчики и итог импорта.
  • Перед запуском видны добавляемые, обновляемые и пропускаемые записи.
  • Пользователь знает, проверен полный файл или только выборка строк.
  • После выполнения фактический результат можно сравнить с прогнозом.

Частые ошибки интерфейса импорта CSV

Показывать первые строки и называть это полной проверкой. Примерные строки полезны для разбора структуры, но не доказывают, что в конце файла нет некорректных значений. Отделяйте быстрый образец от полной проверки и запускайте последнюю перед записью.

Объединять несовместимые причины в одну ошибку. Пользователь не знает, изменить ли разделитель, формат даты, значение конкретной ячейки или правила поля. Привязывайте каждую причину к месту и действию, сохраняя понятный список проблем.

Исправлять данные без показа исходного значения. Автоматическая конвертация удобна, пока не меняет код, дату или точность суммы. Рядом показывайте входное значение и результат преобразования, чтобы человек мог обнаружить неверное предположение.

Скрывать пропускаемые столбцы. Дополнительная колонка может содержать заметку, внешний идентификатор или данные для будущего использования. Назовите поле и сообщите, что оно будет проигнорировано; пользователь решит, допустима ли потеря.

Разрешать опасное обновление без резюме. Если сопоставление по ключу заменит существующие строки, число обновлений должно быть видно до подтверждения. Подпись кнопки «Загрузить» не раскрывает, добавятся ли новые записи или заменятся старые.

Часто задаваемые вопросы

Нужно ли проверять весь CSV до показа превью?

Для быстрого первого экрана достаточно прочитать часть файла, чтобы показать структуру и образец. Но перед записью целевой таблицы необходима проверка всех строк, если система обещает подсчитать ошибки и точное число изменений. Обозначьте в интерфейсе разницу между образцом и полной проверкой.

Что показывать, если CSV не распознал разделитель?

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

Можно ли автоматически исправлять ошибки в данных?

Можно автоматически применять преобразование, если правило однозначно и результат виден до загрузки, например убрать внешние пробелы. Для дат, денежных значений и идентификаторов сначала покажите исходное и целевое значение. Не меняйте данные молча, когда несколько интерпретаций правдоподобны.

Нужно ли блокировать импорт из-за предупреждений?

Предупреждение само по себе не всегда должно блокировать действие. Если необязательная колонка пустая или неизвестный столбец будет пропущен, пользователь может принять последствия. Блокируйте только нарушения, которые делают запись невозможной или создают риск неверной связи с существующими данными.

Как показать проблему в файле на сотни тысяч строк?

Используйте сводные счётчики, фильтры ошибок и поиск, а также указывайте номер исходной строки. Для массовых проблем предложите скачать файл отклонённых строк с причинами, если исправление в интерфейсе непрактично. Показывайте ход проверки и итоговое число обработанных записей.

Что делать с неизвестными колонками?

Перечислите их и объясните, будут ли они сохранены, пропущены или доступны для ручного сопоставления. Не удаляйте их из резюме только потому, что система не нашла соответствующее поле. Возможно, это важная информация или внешний идентификатор, который следует добавить в модель данных.

Как проверить, что импорт завершился без потерь?

Сравните плановые числа с фактическими: сколько строк добавлено, обновлено, пропущено и отклонено. Дайте открыть итоговый список или журнал ошибок, где видны исходный номер строки и причина. Если часть файла не обработана, сообщите это как незавершённый результат, а не как успешную загрузку.

Итог

Предпросмотр CSV должен связывать структуру файла, поля назначения, ошибки строк и ожидаемый результат в один понятный процесс. Покажите исходные значения рядом с интерпретацией, дайте безопасно исправить или исключить запись и перед подтверждением уточните, что будет добавлено или обновлено. Для тестирования интерфейсной типографики можно собрать свой шрифт в Fontgenerator и проверить его на длинных заголовках колонок, номерах строк и сообщениях об ошибках.