Як слід уникати коми і мовних знаків у файлах CSV, щоб вони працювали в Excel?


111

Я генерую файл CSV (розмежований комами, а не вкладками). Мої користувачі, швидше за все, відкриють файл CSV в Excel, двічі клацнувши його. Мої дані можуть містити коми та мовленнєві позначки, тому я уникаю таких, як слід.

Reference, Title, Description
1, "My little title", "My description, which may contain ""speech marks"" and commas."
2, "My other little title", "My other description, which may also contain ""speech marks"" and commas."

Наскільки я знаю, це завжди було так. Ось мій помилка: коли я відкриваю цей файл у Excel 2010, моє втеча не поважається. На аркуші з’являються мовленнєві позначки, а кома викликає нові стовпці.

Відповіді:


219

Ми врешті-решт знайшли відповідь на це.

Excel поважатиме пропуск комами та мовленнєвими позначками лише у тому випадку, якщо значення стовпця НЕ передує пробілу. Тож генерування файлу без пробілів, як це ...

Reference,Title,Description
1,"My little title","My description, which may contain ""speech marks"" and commas."
2,"My other little title","My other description, which may also contain ""speech marks"" and commas."

... виправили проблему. Сподіваюся, це комусь допоможе!


2
Це проблема, з якою я стикався раніше, і про неї завжди забуваю. Excel повинен припинити цю поведінку, оскільки це просто створює плутанину і не є корисним правилом, яке потрібно мати на першому місці. У цих або CSV-файлах не повинно бути пробілів між комами.
Жак Матьє

61

Нижче наведені правила, якщо ви вважаєте, що це випадково. Функція корисної програми може бути створена на основі цих правил.

  1. Якщо значення містить кому, новий рядок або подвійну лапки, то значення String слід повернути укладене в подвійні лапки.

  2. Будь-які символи подвійної цитати у цьому значенні слід уникати за допомогою іншої подвійної лапки.

  3. Якщо значення не містить коми, новий рядок або подвійну лапочку, то значення String слід повернути без змін.


4
Чи боляче щось цитувати-обгортати щось, що не має коми, подвійних лапок чи нових рядків?
Ерік Реппен

2
Ні ЕрікРепен, я не думаю, що це зашкодить нормально. Я належу до java фону, де рекомендується не створювати нові рядки, замінюючи текст у старих, оскільки вони мають власну частку в купі пам'яті. Якщо ви хочете, ви можете беззастережно замінити всі значення та повідомити нам, чи це викликає проблему, хоча це не повинно.
AlphaBetaGamma

2
Поле, яке починається або закінчується пробілом, слід зазначати.
Джонатан Розенн

2

Відповідно до вказівок Яшу, я написав таку функцію (це PL / SQL-код, але він повинен легко адаптуватися до будь-якої іншої мови).

FUNCTION field(str IN VARCHAR2) RETURN VARCHAR2 IS
    C_NEWLINE CONSTANT CHAR(1) := '
'; -- newline is intentional

    v_aux VARCHAR2(32000);
    v_has_double_quotes BOOLEAN;
    v_has_comma BOOLEAN;
    v_has_newline BOOLEAN;
BEGIN
    v_has_double_quotes := instr(str, '"') > 0;
    v_has_comma := instr(str,',') > 0;
    v_has_newline := instr(str, C_NEWLINE) > 0;

    IF v_has_double_quotes OR v_has_comma OR v_has_newline THEN
        IF v_has_double_quotes THEN
            v_aux := replace(str,'"','""');
        ELSE
            v_aux := str;
        END IF;
        return '"'||v_aux||'"';
    ELSE
        return str;
    END IF;
END;

0

Одиночні котирування теж добре працюють, навіть не уникаючи подвійних лапок, принаймні в Excel 2016:

'text with spaces, and a comma','more text with spaces','spaces and "quoted text" and more spaces','nospaces','NOSPACES1234'

Excel поставить це в 5 стовпців (якщо ви вибрали одну цитату як "Текстовий класифікатор" у майстрі "Текст до стовпців")


-3

Навіть після подвійних цитат у мене ця проблема була кілька днів.

Замінив роздільник труби комою, тоді все спрацювало нормально.


1
Ви повинні надати зразок того, що працювало для вас, щоб ОП змогла скопіювати та вставити його за потреби.
Рувім Таннер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.