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?
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?
Réponses:
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
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.
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.