Я работаю над функцией экспорта результатов поиска в файл CSV, который будет открыт в Excel. Одно из полей - это поле с произвольным текстом, которое может содержать разрывы строк, запятые, цитаты и т. Д. Чтобы противодействовать этому, я заключил поле в двойные кавычки (").
Однако, когда я импортирую данные в Excel 2007, устанавливаю соответствующий разделитель и устанавливаю квалификатор текста на двойные кавычки, разрывы строк по-прежнему создают новые записи в разрывах строк, где я ожидал бы увидеть все текстовое поле в одиночная ячейка.
Я также попытался заменить CR / LF (\ r \ n) только на CR (\ r) и снова только на LF (\ n), но не повезло.
Кто-нибудь еще сталкивался с таким поведением, и если да, то как вы его исправили?
TIA,
-J
РЕДАКТИРОВАТЬ:
Вот небольшой файл, который я написал вручную, чтобы воспроизвести проблему.
ID, имя, описание
«12345», «Смит, Джо», «Привет.
Меня зовут Джо».
Когда я импортирую это в Excel 2007, я получаю строку заголовка и две записи. Обратите внимание, что запятая в «Смит, Джо» обрабатывается правильно. Проблемы возникают только из-за разрывов строк.
источник
Ответы:
Excel (по крайней мере, в Office 2007 на XP) может вести себя по-разному в зависимости от того, импортируется ли CSV-файл, открыв его из меню «Файл-> Открыть» или дважды щелкнув файл в проводнике.
У меня есть CSV-файл в кодировке UTF-8, содержащий символы новой строки в некоторых ячейках. Если я открою этот файл из меню Excel File-> Open, появится мастер «импорта CSV», и файл не может быть правильно импортирован: новые строки начинают новую строку даже в кавычках. Если я открою этот файл двойным щелчком по нему в окне проводника, он откроется правильно без вмешательства мастера.
источник
Ни одно из предложенных решений не помогло мне.
Что на самом деле работает (с любой кодировкой):
Скопировать / вставить данные из csv-файла (открыть в редакторе), затем выполнить «текст в столбцах» -> не работает, все в порядке.
Перейдите на следующую вкладку и снова скопируйте / вставьте (то же самое, что у вас уже есть в буфере обмена) -> теперь работает автоматически.
источник
Если вы делаете это вручную, загрузите LibreOffice и используйте LibreOffice Calc для импорта вашего CSV. Он намного лучше справляется с подобными вещами, чем любая версия Excel, которую я пробовал, и может сохранять в XLS или XLSX по мере необходимости, если вам впоследствии понадобится перейти в Excel.
Но если вы застряли в Excel и нуждаетесь в улучшении, похоже, есть способ. Кажется, это зависит от локали (что, по моему скромному мнению, кажется идиотским). У меня нет Excel 2007, но есть Excel 2010 и приведенный пример:
не работает. Я написал его в Блокноте и выбрал Сохранить как ..., а рядом с кнопкой Сохранить можно выбрать кодировку. Я выбрал UTF-8, как было предложено, но безуспешно. Однако замена запятых на точку с запятой сработала для меня. Больше я ничего не менял, и это просто сработало. Поэтому я изменил пример, чтобы он выглядел так, и выбрал кодировку UTF-8 при сохранении в Блокноте:
Но есть загвоздка! Единственный способ, которым это работает, - это дважды щелкнуть файл CSV, чтобы открыть его в Excel. Если я попытаюсь импортировать данные из текста и выберу этот CSV, он все равно не удастся найти в кавычках новой строки.
Но есть еще один загвоздка! Разделитель рабочего поля (запятая в исходном примере, точка с запятой в моем случае), похоже, зависит от региональных настроек системы (задается в Панели управления -> Регион и язык). В Норвегии десятичным разделителем является запятая. Кажется, что Excel избегает этого символа и предпочитает точку с запятой. У меня есть доступ к другому компьютеру, настроенному на британский английский язык, и на этом компьютере первый пример с разделителем запятой работает нормально (только при двойном щелчке), а тот, что с точкой с запятой, действительно не работает! Вот и все о совместимости. Если вы хотите опубликовать этот CSV-файл в Интернете, а у пользователей может быть Excel, я думаю, вам нужно опубликовать обе версии и предложить людям проверить, какой файл дает правильное количество строк.
Итак, все детали, которые мне удалось собрать, чтобы заставить это работать:
Надеюсь, это кому-то поможет.
источник
=FOO(1;2)
вместо=FOO(1,2)
), но явно неверно, что Excel применяет это к синтаксическому анализатору формата файла (какая другая программа анализирует стандартный формат файла в зависимости от локали ??? )Я наконец нашел проблему!
Оказывается, мы писали файл, используя кодировку Unicode, а не ASCII или UTF-8. Изменение кодировки FileStream, похоже, решает проблему.
Спасибо всем за все ваши предложения!
источник
Короткий ответ
Удалите символы новой строки / перевода строки (
\n
с помощью Notepad ++). Excel по-прежнему распознает символ возврата каретки (\r
) для разделения записей.Длинный ответ
Как уже упоминалось, символы новой строки поддерживаются внутри полей CSV, но Excel не всегда корректно их обрабатывает. Я столкнулся с аналогичной проблемой со сторонним CSV, который, возможно, имел проблемы с кодировкой, но не улучшился с изменениями кодировки.
Для меня сработало удаление всех символов новой строки (
\n
). Это приводит к сворачиванию полей в одну запись при условии, что ваши записи разделены комбинацией возврата каретки и новой строки (CR / LF). Затем Excel правильно импортирует файл и распознает новые записи по возврату каретки.Очевидно, более чистым решением будет сначала заменить настоящие символы новой строки (
\r\n
) на временную комбинацию символов, заменив символы новой строки (\n
) на выбранный разделительный символ (например, запятую в файле с точкой с запятой), а затем снова заменить временные символы правильными символами новой строки.источник
\n
между строками и\r\n
внутри значений. Только что убрал последний в Notepad ++.+1 к комментарию Дж. Эшли. Я тоже столкнулся с этой проблемой. Оказывается, Excel требует:
Символ новой строки ("\ n") в строке в кавычках
Возврат каретки и новая строка между каждой строкой.
Например, «Тест», «Многострочный элемент \ n многострочный элемент» \ r \ n «Тест2», «Многострочный элемент \ n многострочный элемент» \ r \ n
Я использовал блокнот ++, чтобы правильно разграничить каждую строку и использовать только новые строки в строке. Обнаружил это, создав многострочные записи в пустом документе Excel и открыв csv в блокноте ++.
источник
Если поле содержит пробел в начале, Excel игнорирует двойные кавычки как квалификатор текста. Решение состоит в том, чтобы исключить ведущие пробелы между запятой (разделителем полей) и двойными кавычками. Например:
Сломано:
Имя, Заголовок, Описание
«Джон», «Мистер», «Мое подробное описание»
Рабочие:
Имя, Заголовок, Описание
«Джон», «Мистер», «Мое подробное описание»
источник
Используйте Google Таблицы и импортируйте файл CSV.
Затем вы можете экспортировать это для использования в Excel.
источник
Если кто-то наткнулся на эту ветку и ищет окончательный ответ, здесь идет (кредит человеку, упоминающему LibreOffice:
1) Установите LibreOffice 2) Откройте Calc и импортируйте файл 3) В моем txt-файле поля были разделены, а символьные поля заключены в «4) сохранить как файл ODS 5) Открыть файл ODS в Excel 6) Сохранить как .xls (x) 7) Готово.8) Это отлично сработало для меня и сэкономило БОЛЬШОЕ ВРЕМЯ!
источник
Вставьте в Notepad ++, выберите «Кодирование»> «Кодировать в ANSI», скопируйте все заново и вставьте в Excel :)
источник
У меня была похожая проблема. У меня были данные Twitter в MySQL. Данные имели перевод строки (LF или \ n) с данными. У меня было требование экспортировать данные MySQL в Excel. LF испортил мой импорт файла csv. Итак, я сделал следующее -
ПРИМЕЧАНИЕ. При замене CRLF или LF не забудьте проверить превышение (\ n, \ r, \ t ... Checkbox [посмотрите на левую нижнюю часть диалогового окна)
источник
Мой опыт работы с Excel 2010 на WinXP с французскими региональными настройками
источник
Excel невероятно ломается при работе с CSV. LibreOffice работает намного лучше. Итак, я узнал, что:
источник
обзор
Спустя почти 10 лет после первоначальной публикации Excel не улучшил импорт файлов CSV. Однако я обнаружил, что он намного лучше импортирует таблицы HTML. Итак, можно использовать Python для преобразования CSV в HTML, а затем импортировать полученный HTML в Excel.
Преимущества этого подхода: (а) он работает надежно, (б) вам не нужно отправлять свои данные в стороннюю службу (например, таблицы Google), (в) не требуется дополнительных «толстых» установок (LibreOffice, Числа и т. Д.) Для большинства пользователей, (d) более высокий уровень, чем вмешательство с символами CR / LF и маркерами спецификации, (e) нет необходимости возиться с настройками локали.
меры
Следующие шаги можно выполнить в любой оболочке, подобной bash, если установлен Python 3. Хотя Python можно использовать для прямого чтения CSV, csvkit используется для промежуточного преобразования в JSON. Это позволяет нам избежать тонкостей CSV в нашем коде Python.
Сначала сохраните следующий сценарий как
json2html.py
. Скрипт считывает файл JSON со стандартного ввода и выгружает его в виде таблицы HTML:Затем установите csvkit в виртуальной среде и используйте его
csvjson
для передачи входного файла в наш сценарий. Рекомендуется отключить угадывание типа ячейки с помощью-I
аргумента:Теперь
output.html
можно импортировать в Excel. Разрывы строк в ячейках будут сохранены.При желании вы можете очистить виртуальную среду Python:
источник
Это для Excel 2016:
Просто была такая же проблема с разрывами строк внутри файла csv с помощью мастера Excel.
Впоследствии я пробовал это с помощью функции «Новый запрос»: Данные -> Новый запрос -> Из файла -> Из CSV -> Выбрать файл -> Импорт -> Загрузить
Он работал отлично, и это было очень быстрое решение для всех вас, у которых возникла та же проблема.
источник
То, что у меня сработало, - импорт в Excel напрямую при условии, что импорт выполняется в текстовом формате, а не в формате csv. M /
источник
просто создайте новый лист с ячейками с переносом строки, сохраните его в csv, затем откройте его с помощью редактора, который может отображать символы конца строки (например, блокнот ++). Сделав это, вы заметите, что разрыв строки в ячейке кодируется с помощью LF, а «настоящий» конец строки - это код с CR LF. Вуаля, теперь вы знаете, как сгенерировать "правильный" CSV-файл для Excel.
источник
У меня также была эта проблема: например, файлы csv (строки с разделителями-запятыми, разделенные двойными кавычками строки) с LF в строках в кавычках. Это были загруженные файлы Square. Я сделал импорт данных, но вместо импорта в виде текстовых файлов, импортированных как «из HTML». На этот раз он проигнорировал LF в строках в кавычках.
источник
Это работало на Mac, используя csv и открывая файл в Excel.
Использование python для записи файла csv.
data = '"первая строка ячейки a1 \ r 2-я строка в ячейке a1 \ r 3-я строка в ячейке a1", "ячейка b1", "1-я строка в ячейке c1 \ r 2-я строка в ячейке c1" \ n "первая строка в ячейка a2 "\ n '
file.write (данные)
источник
В MacOS попробуйте использовать Numbers
Если у вас есть доступ к Mac OS, я обнаружил, что таблица Apple Numbers отлично справляется с выделением сложного многострочного CSV-файла, с которым Excel не справляется. Просто откройте с
.csv
помощью Numbers и затем экспортируйте в Excel.источник
В моем случае открытие CSV в блокноте ++ и добавление
SEP=","
в качестве первой строки позволяет мне без проблем открывать CSV с разрывами строк и utf-8 в Excel.источник
Замените разделитель на TAB (\ t) вместо запятой (,). Затем откройте файл в своем редакторе (Блокноте и т. Д.), Скопируйте содержимое оттуда и вставьте его в файл Excel.
источник
Разрывы строк внутри двойных кавычек идеально подходят для стандарта CSV. Разбор разрывов строк в Excel зависит от настройки разделителя списка ОС:
Windows: вам необходимо установить разделитель списков на запятую (Регион и язык »Форматы» Дополнительно) Источник: /superuser/238944/how-to-force-excel-to-open-csv-files- с-данными, расположенных в колонках-# 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 (см. ответ NewmanLee)
Не забудьте полностью закрыть Excel перед новой попыткой.
Я успешно воспроизвел проблему и смог исправить ее, используя описанное выше как в Max, так и в Windows.
источник