Импорт CSV с разрывами строк в Excel 2007
Я работаю над функцией экспорта результатов поиска в CSV-файл, который будет открыт в Excel. Одно из полей-это бесплатная текстового поля, которые могут содержать разрывы строк, запятые, цитаты и т. п. Чтобы противодействовать этому, я завернул поле в двойные кавычки (").
однако, когда я импортирую данные в Excel 2007, устанавливаю соответствующий разделитель и устанавливаю квалификатор текста в двойную кавычку, разрывы строк все еще создают новые записи в разрывах строк, где я бы ожидайте увидеть все текстовое поле в одной ячейке.
Я также попытался заменить CR / LF (rn) только CR (r), и снова только с LF (n), но не повезло.
кто-нибудь еще сталкивался с этим поведением, и если да, то как вы это исправили?
ТИА,
-Джей
EDIT:
Вот быстрый файл, который я написал вручную, чтобы дублировать проблему.
ID, имя, описание
"12345", " Smith, Джо", " Привет.
Меня зовут Джо."
когда я импортирую это в Excel 2007, я получаю строку заголовка и две записи. Обратите внимание, что запятая в "Smith, Joe" обрабатывается правильно. Это просто разрывы линий, которые вызывают проблемы.
надеюсь, что это поможет.
19 ответов:
Excel (по крайней мере, в Office 2007 на XP) может вести себя по-разному в зависимости от того, импортируется ли файл CSV, открыв его из меню File->Open или дважды щелкнув файл в Проводнике.
У меня есть CSV-файл, который находится в кодировке UTF-8 и содержит новые строки в некоторых ячейках. Если я открою этот файл из меню Excel File - >Open, появится мастер" импорт CSV", и файл не может быть правильно импортирован: новые строки начинают новую строку даже при цитировании. Если я открою этот файл с помощью дважды щелкните по нему в окне Проводника, затем он откроется правильно без вмешательства мастера.
ни одно из предложенных решений работал для меня.
что на самом деле работает (в любой кодировке):
копировать / вставлять данные из csv-файла (открыть в Редакторе), затем выполнить "текст в Столбцах" --> не работает, все в порядке.
перейдите на следующую вкладку и скопируйте / вставьте снова (то же самое, что у вас уже есть в буфере обмена) --> автоматически работает сейчас.
Я, наконец, нашел проблему!
оказывается, что мы писали файл с использованием кодировки Unicode, а не ASCII или UTF-8. Изменение кодировки в потоке файлов, похоже, решает проблему.
спасибо всем за все ваши предложения!
Если вы делаете это вручную, загрузите 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 line-endings (\r\n) как в текстовом поле, так и в качестве разделителя записей, что работает.
- вы должны дважды щелкнуть файл, чтобы открыть его, импорт данных из текста не работает.
надеюсь, это кому-то поможет.
Если поле содержит начальный пробел, Excel игнорирует двойную кавычку в качестве текстового квалификатора. Решение заключается в устранении пробелов между запятой (разделителем полей) и двойной кавычкой. Например:
разбито:
Имя,Название, Описание
"Джон", "Мистер", "мое подробное описание"работает:
Имя,Название, Описание
"Джон","Мистер", "мое подробное описание"
Короткий Ответ:
удалите символы перевода строки / перевода строки (
\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 ++.
вставить в блокнот++, выберите кодирование > кодировать в ANSI, скопируйте все снова и вставьте в Excel:)
Если кто-то натыкается на эту тему и ищет окончательный ответ здесь идет (кредит человеку, упоминающему LibreOffice:
1) Установите LibreOffice 2) Откройте Calc и импортируйте файл 3) Мой txt-файл имел поля, разделенные, и символьные поля, заключенные в " 4) сохранить как файл ODS 5) Откройте ODS файл в Excel 6) Сохранить как .xls(x) 7) сделано. 8) это прекрасно работало для меня и спасло меня BIGTIME!
мой опыт работы с excel 2010 на WinXP с французскими региональными настройками
- разделитель вашего импортированного csv должен соответствовать разделителю списка ваших региональных настроек (; в моем случае)
- вы должны дважды щелкнуть по файлу из проводника (не открывайте его из Excel)
У меня была похожая проблема. У меня были некоторые данные 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 не забудьте проверить Excended (\n,\r,\t... Флажок [посмотрите на левое дно диалогового окна)
Что только что работало для меня, импорт в Excel напрямую при условии, что импорт выполняется в текстовом формате, а не в формате csv. М/
просто создайте новый лист с ячейками с linebreak, сохраните его в csv, а затем откройте его с помощью редактора, который может отображать конец символов строки (например, notepad++). При этом вы заметите, что разрыв линии в ячейке кодируется с помощью LF, а "реальный" конец строки-это код с CR LF. Вуаля, теперь вы знаете, как создать "правильный" csv-файл для excel.
У меня также была эта проблема: ie., csv-файлы(разделенные запятыми, строки с двойными кавычками) с LF в кавычках. Это были загруженные квадратные файлы. Я сделал импорт данных, но вместо импорта в виде текстовых файлов, импортированных как "из HTML". На этот раз он проигнорировал LF в цитируемых строках.
это работало на Mac, используя csv и открывая файл в Excel.
использование python для записи csv-файла.
сведения= '"первой строке в ячейке A1\Р 2 строки в ячейке A1\р 3-й строке в ячейке A1","ячейка В1","1-й линии в ячейке С1\Р 2 строки в ячейке С1"\N"в первой строке в ячейке A2"\п'
.запись (данные)
на MacOS попробуйте использовать числа
Если у вас есть доступ к Mac OS, я обнаружил, что электронная таблица Apple цифры хорошо справляется с распаковкой сложного многострочного CSV-файла, который Excel не смог обработать. Просто откройте
.csv
с числами, а затем экспортировать в Excel.
в моем случае открытие CSV в notepad++ и добавление
SEP=","
как первая строка позволяет мне открыть CSV с разрывами строк и utf-8 в Excel без проблем
замените разделитель на TAB (\t) вместо запятой (,). Затем откройте файл в редакторе (Notepad и т. д.), скопируйте содержимое оттуда, а затем вставьте его в файл Excel.
разрывы строк внутри двойных кавычек отлично подходят в соответствии со стандартом CSV. Разбор разрывов строк в Excel зависит от настройки ОС разделителя списков:
Windows: вам нужно установить разделитель списка на запятую (регион и язык "форматы" дополнительно) Источник: https://superuser.com/questions/238944/how-to-force-excel-to-open-csv-files-with-data-arranged-in-columns#answer-633302
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, так и в Окна.