152 votes

Importation d'un fichier CSV avec des sauts de ligne dans Excel 2007

Je travaille sur une fonctionnalité permettant d'exporter les résultats de recherche vers un fichier CSV à ouvrir dans Excel. L'un des champs est un champ de texte libre, qui peut contenir des sauts de ligne, des virgules, des citations, etc. Pour éviter cela, j'ai placé le champ entre guillemets (").

Toutefois, lorsque j'importe les données dans Excel 2007, que je définis le délimiteur approprié et que je fixe le qualificateur de texte à un guillemet double, les sauts de ligne créent toujours de nouveaux enregistrements à ces endroits, alors que je m'attendrais à voir l'intégralité du champ de texte dans une seule cellule.

J'ai également essayé de remplacer CR/LF ( \r\n ) avec seulement CR ( \r ), et encore une fois avec seulement LF ( \n ), mais sans succès.

Quelqu'un d'autre a-t-il rencontré ce comportement et, si oui, comment l'a-t-il résolu ?

TIA,
-J

EDIT :
Voici un fichier rapide que j'ai écrit à la main pour reproduire le problème.

ID, nom, description
"12345", "Smith, Joe", "Hey.
Je m'appelle Joe."

Lorsque j'importe ce fichier dans Excel 2007, je me retrouve avec une ligne d'en-tête et deux enregistrements. Notez que la virgule dans "Smith, Joe" est traitée correctement. Ce sont les sauts de ligne qui posent problème.

63voto

J Ashley Points 21

Excel (du moins dans Office 2007 sur XP) peut se comporter différemment selon qu'un fichier CSV est importé en l'ouvrant à partir du menu Fichier->Ouvrir ou en double-cliquant sur le fichier dans l'Explorateur.

J'ai un fichier CSV qui est en encodage UTF-8 et qui contient des nouvelles lignes dans certaines cellules. Si j'ouvre ce fichier à partir du menu Fichier->Ouvrir d'Excel, l'assistant "importer CSV" apparaît et le fichier ne peut pas être importé correctement : les nouvelles lignes commencent une nouvelle ligne même lorsqu'elles sont citées. Si j'ouvre ce fichier en double-cliquant dessus dans une fenêtre de l'explorateur, il s'ouvre correctement sans l'intervention de l'assistant.

56voto

sdplus Points 11

Aucune des solutions proposées n'a fonctionné pour moi.

Ce qui fonctionne réellement (avec n'importe quel encodage) :

Copier/coller les données du fichier csv (ouvrir dans un éditeur de texte), puis effectuer "text to columns" --> les données sont transformées de manière incorrecte.

L'étape suivante consiste à aller dans la colonne vide ou la feuille de calcul vide la plus proche et à copier/coller à nouveau (la même chose que ce que vous avez déjà dans votre presse-papiers) --> cela fonctionne automatiquement maintenant.

32voto

ketil Points 435

Si vous le faites manuellement, téléchargez LibreOffice et utilisez LibreOffice Calc pour importer votre fichier CSV. Il fait un bien meilleur travail que n'importe quelle version d'Excel que j'ai essayée, et il peut enregistrer au format XLS ou XLSX si vous avez besoin de transférer vers Excel par la suite.

Mais si vous êtes coincé avec Excel et que vous avez besoin d'une meilleure solution, il semble qu'il y ait un moyen. Il semble que cela dépende de la locale (ce qui semble idiot, à mon humble avis). Je n'ai pas Excel 2007, mais j'ai Excel 2010, et l'exemple donné :

ID,Name,Description
"12345","Smith, Joe","Hey.
My name is Joe."

ne fonctionne pas. Je l'ai écrit dans le Bloc-notes et j'ai choisi Enregistrer sous..., et à côté du bouton Enregistrer, vous pouvez choisir l'encodage. J'ai choisi UTF-8 comme suggéré, mais sans succès. Le remplacement des virgules par des points-virgules a fonctionné pour moi. Je n'ai rien changé d'autre, et ça a marché. J'ai donc modifié l'exemple pour qu'il ressemble à ceci, et j'ai choisi l'encodage UTF-8 lors de l'enregistrement dans le Bloc-notes :

ID;Name;Description
"12345";"Smith, Joe";"Hey.
My name is Joe."

Mais il y a un hic ! Cela ne fonctionne que si vous double-cliquez sur le fichier CSV pour l'ouvrir dans Excel. Si j'essaie d'importer des données à partir d'un texte et que je choisis ce CSV, il échoue toujours sur les nouvelles lignes citées.

Mais il y a autre attraper ! Le séparateur de champ utilisé (virgule dans l'exemple original, point-virgule dans mon cas) semble dépendre des paramètres régionaux du système (définis dans Panneau de configuration -> Région et langue). En Norvège, la virgule est le séparateur décimal. Excel semble éviter ce caractère et lui préférer le point-virgule. J'ai accès à un autre ordinateur réglé sur les paramètres régionaux anglais du Royaume-Uni, et sur cet ordinateur, le premier exemple avec un séparateur à virgule fonctionne bien (uniquement sur doubleclick), et celui avec un point-virgule échoue en fait ! Voilà pour l'interopérabilité. Si vous souhaitez publier ce CSV en ligne et que les utilisateurs disposent d'Excel, je suppose que vous devez publier les deux versions et suggérer aux utilisateurs de vérifier quel fichier donne le nombre correct de lignes.

Voici donc tous les détails que j'ai pu rassembler pour que cela fonctionne :

  1. Le fichier doit être enregistré en UTF-8 avec une nomenclature, ce que fait le Bloc-notes lorsque vous choisissez UTF-8. J'ai essayé UTF-8 sans nomenclature (on peut changer facilement dans Notepad++), mais le double-clic sur le document échoue.
  2. Vous devez utiliser une virgule ou un point-virgule comme séparateur, mais pas celui qui est le séparateur décimal dans vos paramètres régionaux. Il se peut que d'autres caractères fonctionnent, mais je ne sais pas lesquels.
  3. Les champs contenant une nouvelle ligne doivent être précédés du caractère ".
  4. J'ai utilisé les fins de ligne de Windows ( \r\n ) à la fois dans le champ de texte et comme séparateur d'enregistrements, cela fonctionne.
  5. Vous devez double-cliquer sur le fichier pour l'ouvrir, l'importation de données à partir d'un texte ne fonctionne pas.

J'espère que cela aidera quelqu'un.

26voto

jeremyalan Points 1775

J'ai enfin trouvé le problème !

Il s'avère que nous avons écrit le fichier en utilisant l'encodage Unicode, plutôt que l'ASCII ou l'UTF-8. La modification de l'encodage du FileStream semble résoudre le problème.

Merci à tous pour vos suggestions !

11voto

Mazzy Points 1080

Utilisez Google Sheets et importez le fichier CSV.

Vous pouvez ensuite l'exporter pour l'utiliser dans Excel

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X