Подтвердить что ты не робот

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

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

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

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

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

ТИА,
-J

РЕДАКТИРОВАТЬ:
Вот быстрый файл, который я написал вручную, чтобы продублировать проблему.

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

Если вы делаете это вручную, загрузите 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, кажется, избегает этого персонажа и предпочитает точку с запятой. У меня есть доступ к другому компьютеру, установленному в британский английский язык, и на этом компьютере первый пример с разделителем запятой работает отлично (только на doubleclick), а тот, у которого точка с запятой, действительно, не срабатывает! Так много для интероперабельности. Если вы хотите опубликовать этот CSV онлайн, и пользователи могут иметь Excel, я думаю, вы должны опубликовать обе версии и предложить, чтобы люди проверяли, какой файл дает правильное количество строк.

Итак, все детали, которые я смог собрать, чтобы заставить их работать, следующие:

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

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

Ответ 5

Краткий ответ

Удалить символы новой строки/строки (\n с помощью Notepad ++). Excel все равно распознает символ возврата каретки (\r) для разделения записей.

Длинный ответ

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

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

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

Ответ 6

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

Брокен:
Имя, название, описание
"Джон", "Г-н", "Мое подробное описание"

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

Ответ 7

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

  • Символ новой строки ( "\n" ) в цитируемой строке

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

например. "Тест", "Многострочный элемент \n многострочный элемент "\ r\n" Test2 "," Многострочный элемент \n многострочный элемент "\ r\n

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

Ответ 8

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

Ответ 9

Мой опыт работы с Excel 2010 на WinXP с французскими региональными настройками

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

Ответ 10

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

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

Ответ 11

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

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 не забудьте проверить "Исправлено" (\n,\r,\t... Флажок [посмотреть на левое нижнее поле диалогового окна)

Ответ 12

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

Ответ 13

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

Ответ 14

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

Ответ 15

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

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

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

file.write(данные)

Ответ 16

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

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

Ответ 17

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

Ответ 18

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

Ответ 19

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

  1. Windows: вам нужно установить разделитель списка на запятую (Регион и язык "Форматы" Дополнительно) Источник: https://superuser.com/questions/238944/how-to-force-excel-to-open-csv-files- с-данными, расположенных в колонках-# 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 (см. ответ NewmanLee)

Не забудьте полностью закрыть Excel, прежде чем пытаться снова.

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

Ответ 20

Excel невероятно сломан при работе с CSV. LibreOffice работает намного лучше. Итак, я узнал, что:

  • Файл должен быть закодирован в UTF-8 с помощью спецификации, поэтому рассмотрите это для всех пунктов ниже
  • Наилучший результат, безусловно, достигается при его открытии из проводника
  • Если вы откроете его из Excel, возможны два результата:
    • Если он имеет только символы ASCII, он, скорее всего, будет работать
    • Если в нем есть не-ASCII символы, это испортит ваши разрывы строк
  • Кажется, что он сильно зависит от десятичного разделителя, настроенного в региональных настройках ОС, поэтому вы должны выбрать правильный
  • Могу поспорить, что он также может вести себя по-разному в зависимости от ОС и версии Office