Vraie différence entre Excel CSV et CSV standard

16

Quelle est la vraie différence entre un CSV Excel et un CSV standard?

Par exemple, lorsque vous gérez des colonnes avec des sauts de ligne à l'intérieur d'une cellule, comment les codent-elles différemment?

user157195
la source

Réponses:

19

Cela dépend absolument de ce que vous définissez comme CSV "standard". En ce qui me concerne, Excel suit les règles décrites dans la RFC 4180 , le "Format commun et type MIME pour les fichiers CSV".

Prenons un tableau dans lequel la première cellule de la première ligne comporte deux sauts de ligne. Dans Excel, cela ressemblerait à ceci:

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

Maintenant, comment Excel exporterait-il cela? Voyons voir - un éditeur de texte afficherait ceci:

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

Pas très sophistiqué. Il insère un retour chariot (hex 0D) où la rupture de ligne était dans notre cellule. Chaque cellule est entourée de guillemets doubles. En outre, les lignes réelles sont séparées par un retour chariot.

Afin d'analyser cela correctement, un analyseur CSV devrait

  • ignorer ce retour chariot lorsqu'il apparaît entre guillemets doubles (c'est-à-dire une cellule)
  • ne pas ignorer ce retour chariot lorsqu'il apparaît en dehors des guillemets doubles

Si ce n'était pas le cas, vous vous retrouveriez avec quelque chose de brouillé comme ceci - notez qu'il y a maintenant quatre lignes au lieu de deux, car il n'a pas ignoré les sauts de ligne.

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

Mais voyons ce que dit le RFC, peut-être qu'Excel l'a bien fait?

Les champs contenant des sauts de ligne (CRLF), des guillemets doubles et des virgules doivent être placés entre guillemets doubles.

Neat, c'est exactement ce qu'a fait Excel. Donc, en résumé, Excel semble suivre les recommandations d'un fichier CSV "standard". Étant donné un analyseur CSV approprié, il devrait également pouvoir lire les fichiers Excel CSV.

slhck
la source
@shhck: pourquoi est-ce que je vois des implémentations d'analyseur csv séparant "excel" csv avec "csv"? J'ai également trouvé qu'Excel était une implémentation assez robuste.
user157195
@ user157195 Dépend de l'analyseur, vous devriez lire dans sa documentation pourquoi il y a une différence entre les entrées Excel et non Excel. Je ne verrais pas pourquoi il devrait y en avoir un. Je ne le sais que de R , qui traite Excel CSV comme les autres. Cependant, il peut également lire XLS.
slhck
2
En tant que personne qui a lu par programme des fichiers CSV générés par Excel pendant des années dans toutes les formes et tailles, je peux attester que slhck est 100% correct - Excel produit des fichiers CSV 100% «standard». A chaque fois.
Mark Henderson
@Farseeker Merci pour la confirmation! (et vous avez 1337 représentants maintenant!)
slhck
5
Mise en garde! Dans les pays qui utilisent «,» comme point décimal, Excel sera «très très intelligent» et utilisera un «;» caractère séparateur. Cela évite à Zee Germanz de voir trop de «guillemets», «dans», «leurs», «fichiers». Malheureusement, s'ils l'envoient ensuite au bureau britannique, il obtiendra AllSmooshedUpIntoASingleCellOnEveryLine. Brillant.
Luke Usherwood
-1

D'après ce que j'ai compris de l'implémentation csv d'origine, tous les champs de texte étaient placés entre guillemets et les chiffres n'avaient pas besoin de l'être. Excel ne le fait pas et si vous essayez de télécharger vos fichiers csv générés par Excel sur des plates-formes non Microsoft, ils échouent. Il s'agit d'une approche Microsoft standard, ignorez l'interopérabilité et concentrez-vous sur le respect aveugle des règles. Une chose similaire s'est produite avec IE, ils ont suivi correctement les règles html / css pour les attributs de remplissage et de marge et ont ignoré le fait que chaque page Web et navigateur Web existants les traitaient différemment. Le résultat, presque chaque page Web a maintenant des règles spéciales pour IE. Je trouve les fichiers csv produits par excel inutiles et j'utilise une colonne de fonctions "concaténer" pour les créer manuellement moi-même correctement.

Edwin
la source