DocFlow

Перенос строки внутри ячейки разорвал CSV

Как это выглядит

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

Коротко

В CSV строка файла и запись таблицы — не одно и то же. Значение с переносом внутри разрешено, но только в кавычках. Если файл собран без кавычек, каждый перенос воспринимается как конец записи, и таблица разваливается.

Почему так происходит

  1. 01Значение с переносом не заключено в кавычки

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

  2. 02Адрес или примечание в несколько строк

    Чаще всего переносы прячутся в адресах доставки, назначении платежа и примечаниях — полях, которые человек заполняет свободно.

  3. 03Разные виды переноса строки

    Внутри значения может оказаться перенос в стиле одной операционной системы, а разделителем записей служит другой. Программа-читатель видит их одинаково.

Как понять, что причина именно эта

Как починить

Пересобрать файл с правильным экранированием

  1. 1.Попросите отправителя выгрузить CSV с кавычками вокруг текстовых полей
  2. 2.Либо выгрузите в Excel, где эта проблема не возникает

не чинит: Зависит от отправителя и его выгрузки; повлиять на чужую систему обычно нельзя.

Склеить разорванные записи

  1. 1.Найдите строки, где заполнена только первая колонка
  2. 2.Присоедините их к предыдущей записи
  3. 3.Проверьте результат по числу записей

не чинит: Работает, пока разрыв один на запись. Значение с двумя переносами придётся собирать вручную.

Убрать переносы на источнике

  1. 1.Замените переносы внутри значений пробелом до выгрузки
  2. 2.Особенно в адресах и примечаниях

не чинит: Меняет данные: текст станет менее читаемым, зато перестанет ломать импорт.

Когда мы не нужны

Это проблема выгрузки, а не распознавания. Если у вас уже есть CSV, разбирать нечего — надо чинить того, кто его собирает.

Что с этим делает наша выгрузка

Наша выгрузка заключает в кавычки все текстовые поля и экранирует кавычки внутри них. Многострочные значения мы отдаём одной ячейкой, а не разрываем на записи.

Вопросы

Почему просто не удалять переносы?

Потому что это изменение данных. В адресе перенос отделяет город от улицы, и склейка без пробела даст «МоскваЛенинский». Мы сохраняем значение как есть и экранируем его по правилам формата.

Excel лучше CSV для таких данных?

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

Пилот · 1 990 ₽ за 30 дней

Если ошибка не в Excel, а в самих документах

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

Первый счёт разбираем вручную под ваш формат. Списание разовое, автопродления нет. Источник перехода: seo/oshibki/perenos-stroki-razorval-csv.