Как я могу избежать запятых и речевых меток в файлах CSV, чтобы они работали в Excel?

Я создаю 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, мое экранирование не соблюдается. icons появляются на листе, а запятая вызывает новые столбцы.

5 Solutions collect form web for “Как я могу избежать запятых и речевых меток в файлах CSV, чтобы они работали в Excel?”

В итоге мы нашли ответ на этот вопрос.

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." 

… исправлена ​​проблема. Надеюсь, это поможет кому-то!

Ниже приведены правила, если вы считаете, что это случайный. На основе этих правил может быть создана функция полезности.

  1. Если значение содержит запятую, новую строку или двойную кавычку, тогда значение String должно быть возвращено в двойные кавычки.

  2. Любые символы двойной кавычки в значении должны быть экранированы с помощью другой двойной кавычки.

  3. Если значение не содержит запятую, новую строку или двойную кавычку, тогда значение String должно быть возвращено без изменений.

Согласно инструкциям Яшу, я написал следующую функцию (это 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; 

Одиночные кавычки тоже работают отлично, даже не избегая двойных кавычек, по крайней мере, в Excel 2016:

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

Excel поместит это в 5 столбцов (если в мастере «Текст в столбцы» вы выбираете одиночную кавычку как «Текстовый classификатор»)

Даже после двойных кавычек у меня была эта проблема в течение нескольких дней.

Заменил разделитель труб запятой, тогда все работало нормально.

  • как блокировать или ограничивать специальные символы из полей ввода с помощью jquery?
  • «Escape-space» escape-символ «\ b»: неожиданное поведение?
  • Является ли двоеточие `:` безопасным для использования дружественного URL-адреса?
  • Interesting Posts
    Давайте будем гением компьютера.