Импорт CSV с разрывами строк в Excel 2007

Я работаю над функцией экспорта результатов поиска в CSV-файл, который будет открыт в Excel. Одно из полей-это бесплатная текстового поля, которые могут содержать разрывы строк, запятые, цитаты и т. п. Чтобы противодействовать этому, я завернул поле в двойные кавычки (").

однако, когда я импортирую данные в Excel 2007, устанавливаю соответствующий разделитель и устанавливаю квалификатор текста в двойную кавычку, разрывы строк все еще создают новые записи в разрывах строк, где я бы ожидайте увидеть все текстовое поле в одной ячейке.

Я также попытался заменить CR / LF (rn) только CR (r) и снова только LF (n), но не повезло.

кто-нибудь еще сталкивался с этим поведением, и если да, то как вы это исправили?

ТИА,
- J

EDIT:
Вот быстрый файл, который я написал вручную, чтобы дублировать проблему.

ID, имя, описание
"12345", " Smith, Джо", " Привет.
Меня зовут Джо."

когда я импортирую это в Excel 2007, я получаю строку заголовка и две записи. Обратите внимание, что запятая в "Smith, Joe" обрабатывается правильно. Это просто разрывы линий, которые вызывают проблемы.

надеюсь, это поможет.

19 ответов


Excel (по крайней мере, в Office 2007 на XP) может вести себя по-разному в зависимости от того, импортируется ли файл CSV, открыв его из меню Файл->Открыть или дважды щелкнув файл в Проводнике.

У меня есть файл CSV, который находится в кодировке UTF-8 и содержит новые строки в некоторых ячейках. Если я открою этот файл из меню "Файл->Открыть" Excel, появится мастер "импорт CSV", и файл не может быть правильно импортирован: новые строки запускают новую строку даже при цитировании. Если я открою этот файл дважды щелкнув по нему в окне проводника,он откроется правильно без вмешательства мастера.


ни одно из предложенных решений работал для меня.

что на самом деле работает (в любой кодировке):

копировать / вставлять данные из csv-файла (открыть в Редакторе), затем выполнить "текст в Столбцах" -- > не работает, все в порядке.

перейдите на следующую вкладку и скопируйте / вставьте снова (то же самое, что у вас уже есть в буфере обмена) --> автоматически работает сейчас.


Я, наконец, нашел проблему!

оказывается, мы писали файл, используя кодировку Unicode, а не ASCII или UTF-8. Изменение кодировки в FileStream, похоже, решает проблему.

спасибо всем за все ваши предложения!


Если вы делаете это вручную, загрузите LibreOffice и используйте LibreOffice Calc для импорта CSV. Он делает гораздо лучшую работу, чем любая версия Excel, которую я пробовал, и он может сохранять в XLS или XLSX по мере необходимости, если вам нужно перенести в Excel после этого.

но если вы застряли с Excel и вам нужно лучшее исправление, кажется, есть способ. Кажется, это зависит от локали (что кажется идиотским, на мой скромный взгляд). У меня нет Excel 2007, но у меня есть Excel 2010, и приведенный пример:

ID,Name,Description
"12345","Smith, Joe","Hey.
My name is Joe."

не работает. Я написал это в блокноте и выбрал "сохранить как"..., и рядом с кнопкой Сохранить вы можете выбрать кодировку. Я выбрал UTF-8, как было предложено, но не повезло. Однако замена запятой точкой с запятой сработала для меня. Я больше ничего не менял,и это сработало. Поэтому я изменил пример, чтобы выглядеть так, и выбрал кодировку UTF-8 при сохранении в блокноте:

ID;Name;Description
"12345";"Smith, Joe";"Hey.
My name is Joe."

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

но другое поймать! Разделитель рабочего поля (запятая в исходном примере, точка с запятой в моем случае), по-видимому, зависит от региональных настроек системы (устанавливается в разделе Панель управления - > регион и язык). В Норвегии, запятая является десятичным разделителем. Excel, похоже, избегает этого символа и предпочитает точку с запятой вместо. У меня есть доступ к другому компьютеру, установленному в UK English locale, и на этом компьютере первый пример с разделителем запятых отлично работает (только на doubleclick), а тот, с точкой с запятой, фактически терпит неудачу! Так для совместимости. Если вы хотите опубликовать этот CSV онлайн, и пользователи могут иметь Excel, я думаю, вам нужно опубликовать обе версии и предложить людям проверить, какой файл дает правильное количество строк.

Итак, все детали, которые я смог собрать, чтобы получить это к работе относятся:

  1. файл должен быть сохранен как UTF-8 со спецификацией, что и делает Блокнот при выборе UTF-8. Я попробовал UTF-8 без BOM (можно легко переключаться в Notepad++), но затем дважды щелкнул документ не удается.
  2. необходимо использовать разделитель запятой или точкой с запятой, но не тот, который является десятичным разделителем в региональных настройках. Возможно, другие персонажи работают, но я не знаю, что.
  3. необходимо указать поля, содержащие новая строка с " персонажем.
  4. я использовал окончания строк Windows (\r\n) как в текстовом поле, так и в качестве разделителя записей, который работает.
  5. вы должны дважды щелкнуть файл, чтобы открыть его, импорт данных из текста не работает.

надеюсь, это кому-то поможет.


Если поле содержит начальное пространство, Excel игнорирует двойную кавычку в качестве квалификатора текста. Решение состоит в том, чтобы исключить ведущие пробелы между запятой (разделителем полей) и двойной кавычкой. Например:

разбито:
Имя,Название, Описание
"Джон", "Мистер", "мое подробное описание"

работает:
Имя,Название, Описание
"Джон","Мистер", "мое подробное описание"


Короткий Ответ:

удалите символы newline / linefeed (\n с Notepad++). Excel по-прежнему распознает символ возврата каретки (\r) в отдельной записи.

Ответ

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

что работал для меня удалял все символы новой строки (\n). Это приводит к свертыванию полей в одну запись, предполагая, что ваши записи разделены комбинацией возврата каретки и новой строки (CR/LF). Затем Excel правильно импортирует файл и распознает новые записи по возврату каретки.

очевидно, что более чистое решение-сначала заменить реальные новые строки (\r\n) С временной комбинацией символов, заменяющей новые строки (\n) с разделяющий символ выбора (например, запятая в файле с запятой), а затем снова заменяющий временные символы соответствующими новыми строками.


+1 на комментарий Дж Эшли. Я тоже столкнулся с этой проблемой. Оказывается, Excel требует:

  • символ новой строки("\n") в кавычки

  • возврат каретки и новая строка между каждой строкой.

Э. Г. "Тест", " многострочный элемент\n многострочный элемент " \r\n "Test2", " многострочный элемент\n многострочный элемент " \r\n

Я использовал notepad ++ для правильного разграничения каждой строки и только для использования строки в строку. Обнаружил это, создав многострочные записи в пустом документе excel и открыв csv в notepad ++.


вставить в Notepad++, выберите Encoding > Encode in ANSI, скопируйте все снова и вставьте в Excel:)


Если кто-то натыкается на эту тему и ищет окончательный ответ здесь идет (кредит человеку, упомянувшему LibreOffice:

1) Установить LibreOffice 2) Откройте Calc и импортируйте файл 3) Мой txt-файл имел поля, разделенные, и символьные поля, заключенные в " 4) сохранить как файл ODS 5) Откройте файл ODS в Excel 6) Сохранить как .xls(x) 7) сделано. 8) это отлично сработало для меня и спасло меня!


мой опыт работы с excel 2010 на WinXP с французскими настройками regionnal

  • разделитель импортированного CSV должен соответствовать сепаратор список параметров regionnal (; в моем случае)
  • вы должны дважды щелкнуть по файлу из проводника (не открывайте его из Excel)

У меня была похожая проблема. У меня были данные twitter в MySQL. Данные строки( LF или \n), с Данные. У меня было требование экспорта данных MySQL в excel. LF испортил мой импорт csv-файла. Поэтому я сделал следующее ... --2-->

1. From MySQL exported to CSV with Record separator as CRLF
2. Opened the data in notepad++ 
3. Replaced CRLF (\r\n) with some string I am not expecting in the Data. I used ###~###! as replacement of CRLF
4. Replaced LF (\n) with Space
5. Replaced ###~###! with \r\n, so my record separator are back.
6. Saved and then imported into Excel

Примечание-при замене CRLF или LF не забудьте проверить Excended (\n,\r,\t... Флажок [посмотрите на левую нижнюю часть диалогового окна)


Что только что сработало для меня, импорт в Excel напрямую при условии, что импорт выполняется в текстовом формате вместо формата csv. М/


просто создайте новый лист с ячейками с linebreak, сохраните его в csv, а затем откройте его с помощью редактора, который может отображать конец символов строки (например, notepad++). Сделав это, вы заметите, что linebreak в ячейке кодируется LF, а "реальный" конец строки-код с CR LF. Вуаля, теперь вы знаете, как создать "правильный" csv-файл для excel.


У меня также была эта проблема: ie., csv-файлы (разделенные запятыми, строки с двойной кавычкой) с LF в строках с кавычками. Это были загруженные квадратные файлы. Я сделал импорт данных, но вместо импорта в виде текстовых файлов, импортированных как "из HTML". На этот раз он проигнорировал LF в цитируемых строках.


это работало на Mac, используя csv и открывая файл в Excel.

использование python для записи csv-файла.

data= '"первая строка ячейки a1\r 2-я строка в ячейке a1\r 3-я строка в ячейке a1", "ячейка b1","1-я строка в ячейке c1\r 2-я строка в ячейке c1"\n "первая строка в ячейке a2 "\n'

.записи(данные)

на MacOS попробуйте использовать Numbers

Если у вас есть доступ к Mac OS, я обнаружил, что электронная таблица Apple цифры делает хорошую работу по распаковке сложного многострочного CSV-файла, который Excel не смог обработать. Просто откройте .csv с числами, а затем экспортировать в Excel.


в моем случае открытие CSV в notepad++ и добавление SEP="," поскольку первая строка позволяет мне открыть CSV с разрывами строк и utf-8 в Excel без проблем


замените разделитель на TAB (\t) вместо запятой (,). Затем откройте файл в редакторе (Notepad и т. д.), скопируйте содержимое оттуда, а затем вставьте его в файл Excel.


разрывы строк внутри двойных кавычек отлично подходят в соответствии со стандартом CSV. Разбор разрывов строк в Excel зависит от настройки ОС разделителя списка:

  1. Windows: вам нужно установить разделитель списка в запятую (регион и язык "форматы" дополнительно) Источник: https://superuser.com/questions/238944/how-to-force-excel-to-open-csv-files-with-data-arranged-in-columns#answer-633302

  2. Mac: необходимо изменить регион к нам (затем вручную изменить обратно другие настройки на ваши предпочтения) Источник: https://answers.microsoft.com/en-us/mac/forum/macoffice2016-macexcel/line-separator-comma-semicolon-in-excel-2016-for/7db1b1a0-0300-44ba-ab9b-35d1c40159c6 (см. ответ Ньюманли)

Не забудьте полностью закрыть Excel перед повторной попыткой.

Я успешно реплицировал проблему и смог ее исправить, используя вышеуказанное как в Max, так и в Окна.