Importation de CSV avec des sauts de ligne dans Excel 2007

Je travaille sur une fonctionnalité pour exporter les résultats de la 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.

Toutefois, lorsque j’importe les données dans Excel 2007, que vous définissez le délimiteur approprié et que vous définissez le qualificatif de texte entre guillemets, les sauts de ligne créent toujours de nouveaux enregistrements lors des sauts de ligne. unicellulaire.

J’ai aussi essayé de remplacer CR / LF (\ r \ n) avec juste CR (\ r), et encore avec juste LF (\ n), mais pas de chance.

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

TIA,
-J

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

ID, nom, description
“12345”, “Smith, Joe”, “Hey.
Mon nom est Joe.”

Lorsque je l’importe dans Excel 2007, je me retrouve avec une ligne d’en-tête et deux enregistrements. Notez que la virgule dans “Smith, Joe” est gérée correctement. Ce sont juste les sauts de ligne qui posent problème.

J’espère que cela pourra aider.

Excel (au moins dans Office 2007 sur XP) peut se comporter différemment selon que le 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 codage UTF-8 et contient des nouvelles lignes dans certaines cellules. Si j’ouvre ce fichier à partir du menu Fichier-> Ouvrir d’Excel, l’assistant “import 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 la fenêtre de l’explorateur, il s’ouvre correctement sans l’intervention de l’assistant.

Aucune des solutions suggérées n’a fonctionné pour moi.

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

Copiez / collez les données du fichier csv (ouvrez-le dans l’éditeur), puis exécutez “texte dans les colonnes” -> ne fonctionne pas, d’accord.

Allez dans l’onglet suivant et recopiez / collez à nouveau (même chose que ce que vous avez déjà dans votre presse-papier) -> fonctionne automatiquement maintenant.

J’ai finalement trouvé le problème!

Il s’avère que nous écrivions le fichier en utilisant le codage Unicode, plutôt que ASCII ou UTF-8. Changer l’encodage sur FileStream semble résoudre le problème.

Merci à tous pour toutes vos suggestions!

Si vous le faites manuellement, téléchargez LibreOffice et utilisez LibreOffice Calc pour importer votre CSV. Cela fonctionne bien mieux que n’importe quelle version d’Excel que j’ai essayée, et il peut être sauvegardé sur XLS ou XLSX si nécessaire, si vous devez ensuite le transférer sur Excel.

Mais si vous êtes bloqué avec Excel et que vous avez besoin d’un meilleur correctif, il semble y avoir un moyen. Cela semble dépendre de la localisation (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. Changer les virgules en points-virgules a fonctionné pour moi, cependant. Je n’ai rien changé d’autre et ça a fonctionné. J’ai donc changé l’exemple pour ressembler à 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 piège! La seule façon dont cela fonctionne est si vous double-cliquez sur le fichier CSV pour l’ouvrir dans Excel. Si j’essaie d’importer des données à partir de texte et que je choisis ce fichier CSV, cela échoue toujours sur les nouvelles lignes.

Mais il y a une autre prise! Le séparateur de champs de travail (virgule dans l’exemple d’origine, point-virgule dans mon cas) semble dépendre des parameters régionaux du système (définis sous 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 préfère un point-virgule à la place. J’ai access à un autre ordinateur configuré en anglais britannique, et sur cet ordinateur, le premier exemple avec un séparateur de virgule fonctionne bien (uniquement en double clic), et celui avec un point-virgule échoue en fait! Voilà pour l’interopérabilité. Si vous souhaitez publier ce fichier 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.

Donc, tous les détails que j’ai pu rassembler pour que cela fonctionne sont:

  1. Le fichier doit être enregistré au format UTF-8 avec une nomenclature, ce que fait le Bloc-notes lorsque vous choisissez UTF-8. J’ai essayé UTF-8 sans BOM (peut être changé facilement dans Notepad ++), mais double-cliquer sur le document échoue.
  2. Vous devez utiliser une virgule ou un séparateur de points-virgules, mais pas celui qui est le séparateur décimal dans vos parameters régionaux. Peut-être que d’autres personnages fonctionnent, mais je ne sais pas lequel.
  3. Vous devez citer des champs contenant une nouvelle ligne avec le caractère “.
  4. J’ai utilisé des fins de ligne Windows (\ r \ n) à la fois dans le champ de texte et en tant que séparateur d’enregistrement, cela fonctionne.
  5. Vous devez double-cliquer sur le fichier pour l’ouvrir, l’importation des données à partir du texte ne fonctionne pas.

J’espère que cela aide quelqu’un.

Si le champ contient un espace de début, Excel ignore le guillemet double en tant que qualificatif de texte. La solution consiste à éliminer les espaces entre la virgule (séparateur de champs) et les guillemets doubles. Par exemple:

Cassé:
Nom, titre, description
“John”, “Mr.”, “Ma description détaillée”

Travail:
Nom, titre, description
“John”, “Mr”, “Ma description détaillée”

Réponse courte

Supprimez les caractères newline / linefeed ( \n avec Notepad ++). Excel reconnaîtra toujours le caractère de retour chariot ( \r ) pour séparer les enregistrements.

Longue réponse

Comme mentionné, les caractères de nouvelle ligne sont pris en charge dans les champs CSV, mais Excel ne les gère pas toujours correctement. J’ai été confronté à un problème similaire avec un serveur CSV tiers qui avait probablement des problèmes d’encodage mais ne s’est pas amélioré avec les changements d’encodage.

Ce qui a fonctionné pour moi a été de supprimer tous les caractères de nouvelle ligne ( \n ). Cela a pour effet de réduire les champs à un seul enregistrement en supposant que vos enregistrements sont séparés par la combinaison d’un retour chariot et d’une nouvelle ligne (CR / LF). Excel importera alors correctement le fichier et reconnaîtra les nouveaux enregistrements par le retour chariot.

Évidemment, une solution plus propre consiste à remplacer les nouvelles lignes ( \r\n ) par une combinaison de caractères temporaire, en remplaçant les nouvelles lignes ( \n ) par votre choix de caractère séparé (par exemple une virgule dans un fichier de points-virgules). avec de nouvelles lignes appropriées à nouveau.

+1 sur le commentaire de J Ashley. J’ai aussi rencontré ce problème. Il s’avère qu’Excel nécessite:

  • Un caractère de nouvelle ligne (“\ n”) dans la chaîne entre guillemets

  • Un retour chariot et une nouvelle ligne entre chaque ligne.

Par exemple “Test”, “Elément multiligne \ n Elément multiligne” \ r \ n “Test2”, “Elément multiligne \ n Elément multiligne” \ r \ n

J’ai utilisé notepad ++ pour délimiter chaque ligne correctement et utiliser uniquement des nouvelles lignes dans la chaîne. Cela a été découvert en créant des entrées multilignes dans un document Excel vierge et en ouvrant le fichier csv dans notepad ++.

Collez dans Notepad ++, sélectionnez Codage> Encoder dans ANSI, copiez à nouveau et collez dans Excel 🙂

Si quelqu’un trébuche sur ce fil et cherche une réponse définitive ici, va (crédit à la personne mentionnant LibreOffice:

1) Installez LibreOffice 2) Ouvrez Calc et importez le fichier 3) Mon fichier txt avait les champs séparés par et les champs de caractères inclus dans “4) sauvegardez le fichier ODS 5) Ouvrez le fichier ODS dans Excel 6) Enregistrez sous .xls (x) 7) Fait 8) Cela a parfaitement fonctionné pour moi et m’a sauvé BIGTIME!

Mon expérience d’Excel 2010 sur WinXP avec des parameters régionaux français

  • le séparateur de votre csv importé doit correspondre au séparateur de liste de vos parameters régionaux (dans mon cas)
  • vous devez double-cliquer sur le fichier depuis l’explorateur (ne l’ouvrez pas depuis Excel)

J’avais un problème similaire. J’avais des données Twitter en MySQL. Les données avaient un stream de ligne (LF ou \ n) dans les données. Je devais exporter les données MySQL dans Excel. Le LF était en train de gâcher mon importation de fichier csv. J’ai donc fait ce qui suit –

 1. From MySQL exported to CSV with Record separator as CRLF 2. Opened the data in notepad++ 3. Replaced CRLF (\r\n) with some ssortingng I am not expecting in the Data. I used ###~###! as replacement of CRLF 4. Replaced LF (\n) with Space 5. Replaced ###~###! with \r\n, so my record separator are back. 6. Saved and then imported into Excel 

NOTE- Lorsque vous remplacez CRLF ou LF, n’oubliez pas de cocher Excended (\ n, \ r, \ t … Case à cocher [regardez en bas à gauche de la boîte de dialog]

Ce qui a juste fonctionné pour moi, importation dans Excel directement à condition que l’importation soit faite au format texte plutôt qu’au format csv. M /

Il suffit de créer une nouvelle feuille avec des cellules avec saut de ligne, de l’enregistrer dans csv puis de l’ouvrir avec un éditeur pouvant afficher les caractères de fin de ligne (comme notepad ++). En faisant cela, vous remarquerez qu’un saut de ligne dans une cellule est codé avec LF alors qu’une «fin» de ligne réelle est du code avec CR LF. Voilà, maintenant vous savez comment générer un fichier csv “correct” pour Excel.

J’ai aussi eu ce problème: ie., Fichiers csv (délimité par des virgules, chaînes délimitées par des guillemets doubles) avec LF dans des chaînes entre guillemets. Ces fichiers ont été téléchargés Square. J’ai fait une importation de données mais au lieu d’importer en tant que fichiers texte, importés en tant que “à partir de HTML”. Cette fois, il a ignoré les LF dans les chaînes entre guillemets.

Cela a fonctionné sur Mac, en utilisant csv et en ouvrant le fichier dans Excel.

Utiliser python pour écrire le fichier csv.

data = ‘”première ligne de la cellule a1 \ r 2ème ligne de la cellule a1 \ 3ème ligne de la cellule a1″, “cellule b1”, “1ère ligne de la cellule c1 \ r ligne 2 de la cellule c1” \ n “première ligne de la cellule cellule a2 “\ n ‘

fichier.write (données)

Sur MacOS, essayez d’utiliser Numbers

Si vous avez access à Mac OS, j’ai constaté que Numbers, la feuille de calcul Apple, réussit bien à éliminer un fichier CSV multiligne complexe que Excel ne pouvait pas gérer. Ouvrez simplement le .csv avec Numbers, puis exportez vers Excel.

Dans mon cas, ouvrir CSV dans notepad ++ et append SEP="," comme la première ligne me permet d’ouvrir CSV avec des sauts de ligne et utf-8 dans Excel sans problèmes

Remplacez le séparateur par TAB (\ t) au lieu de virgule (,). Ouvrez ensuite le fichier dans votre éditeur (Bloc-notes, etc.), copiez le contenu à partir de là, puis collez-le dans le fichier Excel.