Импорт CSV с переносами строк в Excel 2007
Я работаю над функцией экспорта результатов поиска в файл CSV, который будет открыт в Excel. Одним из полей является текстовое поле, которое может содержать разрывы строк, запятые, цитаты и т. Д. Чтобы противодействовать этому, я обернул поле в двойные кавычки («).
Однако, когда я импортирую данные в Excel 2007, устанавливаю соответствующий разделитель и устанавливаю для текстового квалификатора двойные кавычки, разрывы строк по-прежнему создают новые записи в разрывах строк, где я ожидаю увидеть все текстовое поле в отдельная клетка.
Я также попытался заменить CR / LF () просто CR (), и снова только LF (), но не повезло.
Кто-нибудь еще сталкивался с таким поведением, и если да, то как вы это исправили?
РЕДАКТИРОВАТЬ:
Вот быстрый файл, который я написал вручную, чтобы продублировать проблему.
ID, имя, описание
«12345», «Смит, Джо», «Привет.
Меня зовут Джо. «
Когда я импортирую это в Excel 2007, я получаю строку заголовка и две записи. Обратите внимание, что запятая в «Смит, Джо» обрабатывается правильно. Это просто разрывы строк, которые вызывают проблемы.
18 ответов
Excel (по крайней мере, в Office 2007 на XP) может вести себя по-разному в зависимости от того, импортирован ли файл CSV, открыв его из меню «Файл»> или дважды щелкнув файл в проводнике.
Скопируйте / вставьте данные из csv-файла (откройте в редакторе), затем выполните «текст в столбцах» — & gt; не работает, все в порядке.
Перейдите на следующую вкладку и снова скопируйте / вставьте (то же самое, что уже есть в буфере обмена) — & gt; теперь работает автоматически.
Оказывается, мы писали файл с использованием кодировки Unicode, а не ASCII или UTF-8. Изменение кодировки в FileStream, кажется, решает проблему.
Если вы делаете это вручную, загрузите LibreOffice и используйте LibreOffice Calc для импорта CSV. Он гораздо лучше справляется с подобными вещами, чем любая другая версия Excel, которую я пробовал, и может сохранять в XLS или XLSX по мере необходимости, если вам потребуется впоследствии перейти в Excel.
Но если вы застряли в Excel и нуждаетесь в лучшем исправлении, кажется, есть выход. Кажется, это зависит от локали (что, по моему скромному мнению, кажется идиотским). У меня нет Excel 2007, но у меня есть Excel 2010, и приведенный пример:
не работает. Я написал это в Блокноте и выбрал Сохранить как. , , и рядом с кнопкой Сохранить вы можете выбрать кодировку. Я выбрал UTF-8, как было предложено, но безуспешно. Однако смена запятых на точки с запятой сработала. Я ничего не изменил, и это просто сработало. Поэтому я изменил пример, чтобы он выглядел следующим образом, и выбрал кодировку UTF-8 при сохранении в блокноте:
Но есть загвоздка! Единственный способ это работает, если дважды щелкнуть файл CSV, чтобы открыть его в Excel. Если я попытаюсь импортировать данные из текста и выбрал этот CSV, то он все равно не будет работать на новых строках в кавычках.
Итак, все детали, которые я смог собрать, чтобы заставить это работать:
- Файл должен быть сохранен как UTF-8 с спецификацией, что делает Блокнот, когда вы выбираете UTF-8. Я пробовал UTF-8 без спецификации (можно легко переключать в Notepad ++), но дважды щелкнуть документ не удается.
- Вы должны использовать разделитель запятой или точки с запятой, но не тот, который является десятичным разделителем в ваших региональных настройках. Возможно, другие персонажи работают, но я не знаю, какие именно.
- Вы должны заключить в кавычки поля, содержащие символ новой строки.
- Я использовал концы строк Windows () как в текстовом поле, так и в качестве разделителя записей, это работает.
- Необходимо дважды щелкнуть файл, чтобы открыть его, импорт данных из текста не работает.
Если поле содержит начальный пробел, Excel игнорирует двойную кавычку в качестве квалификатора текста. Решение состоит в том, чтобы исключить начальные пробелы между запятой (разделитель полей) и двойными кавычками. Например:
Сломан:
Имя, должность, описание
«Джон», «мистер» «,» Мое подробное описание «
Работа:
Имя, должность, описание
«Джон», «Г-н. «,» Мое подробное описание «
GIS-Lab: Создание точечного слоя из текстового файла в QGIS
- Файл должен быть сохранен как UTF-8 с спецификацией, что делает Блокнот, когда вы выбираете UTF-8. Я пробовал UTF-8 без спецификации (можно легко переключать в Notepad ++), но дважды щелкнуть документ не удается.
- Вы должны использовать разделитель запятой или точки с запятой, но не тот, который является десятичным разделителем в ваших региональных настройках. Возможно, другие персонажи работают, но я не знаю, какие именно.
- Вы должны заключить в кавычки поля, содержащие символ новой строки.
- Я использовал концы строк Windows () как в текстовом поле, так и в качестве разделителя записей, это работает.
- Необходимо дважды щелкнуть файл, чтобы открыть его, импорт данных из текста не работает.
Я бы рекомендовал сохранить CSV, а затем использовать пользовательское консольное приложение/скрипт для постобработки. Существует множество доступных парсеров CSV, которые могут прочитать ,-csv , а затем сохранить его как ;-csv .