Справжня різниця між Excel CSV та Standard CSV


16

Яка справжня різниця між CSV Excel від стандартного CSV?

Наприклад, обробляючи стовпці з розривами рядків всередині однієї комірки, як вони кодують її по-різному?

Відповіді:


19

Це абсолютно залежить від того, що ви визначаєте як "стандартний" CSV. Що стосується мене, Excel дотримується правил, викладених у RFC 4180 , "Загальний формат та тип MIME для файлів CSV".

Розглянемо таблицю, де перша клітинка в першому рядку має два розриви рядків. У Excel це виглядатиме так:

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | col1, line1a  |            |            |
|   | col1, line1b  |            |            |
|   | col1, line1c  | col2, row1 | col3, row1 |
| 2 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

Тепер, як би Excel експортував це? Подивимось - текстовий редактор відобразив би це:

"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"

Не дуже витончений. Він вставляє повернення каретки (шестигранну 0D) там, де в нашій комірці був розрив лінії. Кожна клітина оточена подвійними лапками. Також фактичні рядки відокремлюються зворотним перевезенням.

Щоб правильно розібратися в цьому, потрібно було б зробити аналізатор CSV

  • ігноруйте це повернення каретки, коли воно з’являється в подвійних лапках (тобто клітинку)
  • не ігноруйте повернення вагона, коли воно з’являється поза подвійних лапок

Якщо цього не зробило, то ви отримаєте щось подібне, як це - зауважте, що тепер чотири рядки замість двох, оскільки не вдалося ігнорувати розриви рядків.

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | "col1, line1a |            |            |
| 2 | col1, line1b  |            |            |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

Але давайте подивимось, що говорить RFC, можливо, Excel зробив це правильно?

Поля, що містять розриви рядків (CRLF), подвійні лапки та коми повинні бути укладені у подвійні лапки.

Акуратно, саме так зробив Excel. Підводячи підсумок, Excel, схоже, дотримується рекомендацій "стандартного" CSV-файлу. Враховуючи правильний аналізатор CSV, він повинен мати можливість також читати файли CSV Excel.


@shhck: чому я бачу реалізацію CSV-парсера, що розділяє "excel" csv від "csv"? Я також виявив, що excel є досить надійною реалізацією.
користувач157195

@ user157195 Залежно від аналізатора, ви повинні прочитати в його документації, чому існує різниця між введеннями Excel і не Excel. Я б не бачив, чому має бути такий. Я знаю це лише з R , який трактує Excel CSV так само, як і всі інші. Однак він також може читати XLS.
slhck

2
Оскільки хтось протягом багатьох років систематично читає CSV-файли, створені файлами Excel, у будь-яких формах і розмірах, я можу засвідчити, що slhck є правильним на 100% - Excel створює 100% "стандартні" CSV-файли. Кожен раз.
Марк Хендерсон

@Farseeker Дякую за підтвердження! (а у вас зараз 1337 респ!)
slhck

5
Обережно! У країнах, які використовують ',' в якості десяткової крапки Excel буде "дуже розумним" і використовуватиме ";" розділовий символ. Це рятує Zee Germanz від того, щоб побачити занадто багато "цитат"; "in"; "їх"; "файлів". На жаль, якщо вони потім відправлять його до офісу Великобританії, він отримає AllSmooshedUpIntoASingleCellOnEveryLine. Блискуча.
Люк Ушервуд

-1

Моє розуміння з оригінальної реалізації CSV полягало в тому, що всі текстові поля укладені в лапки і цифри не повинні бути. Excel цього не робить, і якщо ви спробуєте завантажити свої файли CSV, створені Excel, на платформи, що не є мікрософт, вони виходять з ладу. Це стандартний підхід для мікрософт, ігноруйте сумісність і зосереджуйтесь на сліпому дотриманні правил. Подібне сталося з IE, вони правильно дотримувались правил html / css щодо атрибутів padding та margin та ігнорували той факт, що кожна існуюча веб-сторінка та веб-браузер трактували їх по-різному. У результаті майже кожна веб-сторінка має спеціальні правила для IE. Я вважаю, що файли CSV, вироблені програмою excel, є непотрібними, і використовую стовпець "об'єднати" функції, щоб вручну створити їх самостійно.

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