web-dev-qa-db-fra.com

Importation de fichiers CSV avec des sauts de ligne dans Excel 2007

Je travaille sur une fonctionnalité permettant d'exporter les résultats de la recherche dans 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 remédier à cela, j'ai placé le champ entre guillemets (").

Toutefois, lorsque j'importe les données dans Excel 2007, que vous définissez le délimiteur approprié et que le qualificateur de texte est mis entre guillemets, les sauts de ligne créent toujours de nouveaux enregistrements au niveau des sauts de ligne, où je m'attendrais à voir tout le champ de texte unicellulaire.

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

Quelqu'un d'autre a-t-il rencontré ce problème et si oui, comment l'avez-vous corrigé?

TIA,
- J

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

ID, Nom, Description
"12345", "Smith, Joe", "Hé.
Mon nom est Joe."

Lorsque j'importe cela 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.

98
jeremyalan

J'ai enfin 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!

24
jeremyalan

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

J'ai un fichier CSV codé en UTF-8 et contenant des sauts de 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 démarrent une nouvelle ligne même lorsqu'elles sont entre guillemets. 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.

43
J Ashley

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

Qu'est-ce qui fonctionne réellement (avec n'importe quel encodage):

Copier/coller des données depuis un fichier csv (ouvrir dans l'éditeur), puis effectuer un "texte dans les colonnes" -> ne fonctionne pas, d'accord.

Aller à l'onglet suivant et copier/coller à nouveau (même chose que ce que vous avez déjà dans votre presse-papiers) -> fonctionne maintenant automatiquement. 

29
sdplus

Si vous le faites manuellement, téléchargez LibreOffice et utilisez LibreOffice Calc pour importer votre fichier CSV. Ce type de travail est bien meilleur que n’importe quelle version d’Excel que j’ai essayée et il peut enregistrer au format XLS ou XLSX selon les besoins si vous devez le transférer ultérieurement dans Excel.

Mais si vous êtes coincé avec Excel et avez besoin d'une meilleure solution, 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 bien fonctionné pour moi. Je n'ai rien changé d'autre et cela a fonctionné. J'ai donc modifié l'exemple pour ressembler à ceci et 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! Cela fonctionne uniquement 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, il échoue quand même sur les sauts de lignes indiqués.

Mais il y a un autre attraper! Le séparateur de champ de travail (la virgule dans l'exemple d'origine, le point-virgule dans mon cas) semble dépendre des paramètres 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. J'ai accès à un autre ordinateur avec les paramètres régionaux anglais britannique et sur cet ordinateur, le premier exemple avec un séparateur de virgule fonctionne correctement (uniquement en double-clic), et celui avec point-virgule échoue! Voilà pour l'interopérabilité. Si vous souhaitez publier ce fichier CSV en ligne et que les utilisateurs peuvent utiliser Excel, je suppose que vous devez publier les deux versions et suggérer aux personnes de vérifier quel fichier donne le nombre correct de lignes.

Ainsi, tous les détails que j'ai pu rassembler pour que cela fonctionne sont les suivants:

  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 nomenclature (peut être facilement basculé dans Notepad ++), mais un double-clic sur le document échoue.
  2. Vous devez utiliser une virgule ou un séparateur point-virgule, mais pas celui qui est le séparateur décimal dans vos paramètres régionaux. Peut-être que d'autres personnages fonctionnent, mais je ne sais pas lequel.
  3. Vous devez citer les 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 de données à partir de texte ne fonctionne pas.

J'espère que ça aide quelqu'un.

22
ketil

Réponse courte

Supprimez les caractères de nouvelle ligne/saut de ligne (\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 rencontré un problème similaire avec un fichier CSV tiers qui avait peut-être des problèmes d'encodage mais qui ne s'était pas amélioré avec les modifications 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 tout d'abord les nouvelles lignes réelles (\r\n) par une combinaison de caractères temporaire, en remplaçant les nouvelles lignes (\n) par votre caractère de choix (par exemple, une virgule dans un fichier point-virgule), puis en remplaçant les caractères temporaires par des nouvelles lignes appropriées. .

6
Lilienthal

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

Cassé:
Nom, titre, description 
"John", "M.", "Ma description détaillée"

Travail:
Nom, titre, description
"John", "Mr.", "Ma description détaillée"

5
Jeremy

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

  • Un caractère de nouvelle ligne ("\ n") dans la chaîne citée 

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

Par exemple. "Test", "Elément multiligne\n Elément multiligne"\\ n "Test2", "Elément multiligne\n Elément multiligne"\\ n

J'ai utilisé notepad ++ pour délimiter chaque ligne correctement et pour n'utiliser que des retours à la ligne dans la chaîne. Nous avons découvert cela en créant des entrées multilignes dans un document Excel vierge et en ouvrant le fichier csv dans le bloc-notes ++.

4
Iventio

Si quelqu'un tombe sur ce fil et cherche une réponse définitive (crédit à la personne mentionnant LibreOffice:

1) Installez LibreOffice 2) Ouvrez Calc et importez le fichier 3) Mon fichier txt comportait des champs séparés par des champs de caractères, ainsi que des champs de caractères entre " 4), en tant que fichier ODS. fichier dans Excel 6) Enregistrer sous .xls (x) 7) Terminé .. 8) Cela a parfaitement fonctionné pour moi et m'a sauvé BIGTIME!

2
Rock Rico

Collez dans Notepad ++, sélectionnez Encodage> Encoder en ANSI, copiez-le à nouveau et collez-le dans Excel :)

2
Aaron Dake

Mon expérience avec Excel 2010 sur WinXP avec les paramètres régionaux français

  • le séparateur de votre csv importé doit correspondre au séparateur de liste de vos paramètres régionaux (; dans mon cas)
  • vous devez double-cliquer sur le fichier dans l'explorateur. ne l'ouvrez pas depuis Excel
2
pingouinshark

J'avais un problème similaire. J'ai eu quelques données Twitter dans MySQL. Les données avaient un saut de ligne (LF ou\n) dans les données. J'avais besoin d'exporter les données MySQL dans Excel. Le LF perturbait mon importation de fichier csv. Alors j'ai 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 string 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

REMARQUE: lors du remplacement de CRLF ou de LF, n'oubliez pas de cocher la case Excédé (\ n,\r,\t ... Case à cocher [regardez en bas à gauche de la boîte de dialogue)

1
Dibs

Utilisez Google Sheets et importez le fichier CSV.

Ensuite, vous pouvez exporter que pour utiliser dans Excel

1
Mazzy

créez simplement une nouvelle feuille avec des cellules avec sauts de ligne, sauvegardez-la au format csv puis ouvrez-la avec un éditeur pouvant afficher les caractères de fin de ligne (comme le bloc-notes ++). En faisant cela, vous remarquerez qu'un saut de ligne dans une cellule est codé avec LF tandis qu'une "vraie" fin de ligne est codée avec CR LF. Voilà, vous savez maintenant comment générer un fichier "correct" csv pour Excel.

0
depassage

Ce qui a juste fonctionné pour moi, importer dans Excel directement, à condition que l'importation se fasse au format texte au lieu du format csv. M /

0
Martin

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

Utilisation de python pour écrire le fichier csv.

data = '"1ère ligne de la cellule a1 2ème ligne de la cellule a1 3ème ligne de la cellule a1", "cellule b1", "1ère ligne de la cellule c1 2ème ligne de la cellule c1"\n "première ligne de cellule a2 "\ n '

fichier.write (données)

0
2003G35

Les sauts de ligne entre guillemets doubles conviennent parfaitement au standard CSV. L’analyse des sauts de ligne dans Excel dépend du paramètre de séparateur de liste défini par le système d’exploitation:

  1. Windows: vous devez définir le séparateur de liste sur virgule (Région et langue »Formats» Avancés) Source: https://superuser.com/questions/238944/how-to-force-Excel-to-open -csv-fichiers-avec-les-données-disposées-en-colonnes # answer-633302

  2. Mac: vous devez définir la région sur US (puis rétablir manuellement les autres paramètres à votre convenance) Source: https://answers.Microsoft.com/en-us/mac/forum/macoffice2016-macexcel/ ligne-séparateur-virgule-point-virgule-dans-Excel-2016-pour/7db1b1a0-0300-44ba-ab9b-35d1c40159c6 (voir la réponse de NewmanLee)

N'oubliez pas de fermer complètement Excel avant de réessayer.

J'ai reproduit le problème avec succès et j'ai pu le résoudre à l'aide de ce qui précède dans Max et Windows.

0
David Avikasis

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.

0
Ionut

Excel est incroyablement cassé lorsqu'il s'agit de fichiers CSV. LibreOffice fait un bien meilleur travail. Alors, j'ai découvert que:

  • Le fichier doit être encodé en UTF-8 avec BOM, donc considérez-le pour tous les points ci-dessous.
  • Le meilleur résultat, de loin, est obtenu en l'ouvrant à partir de File Explorer.
  • Si vous l'ouvrez à partir d'Excel, deux résultats sont possibles:
    • S'il ne comporte que ASCII caractères, cela fonctionnera probablement.
    • Si elle comporte des caractères non-ASCII, vos sauts de ligne seront perturbés
  • Il semble fortement dépendre du séparateur décimal configuré dans les paramètres régionaux du système d'exploitation Vous devez donc sélectionner le bon
  • Je parierais que cela peut aussi se comporter différemment selon le système d’exploitation et Version Office
0
GustavoMP

J'ai également eu ce problème: c'est-à-dire des fichiers csv (séparés par des virgules, des chaînes délimitées par des guillemets) avec LF dans des chaînes entre guillemets. Ceux-ci ont été téléchargés des fichiers Square. J'ai fait une importation de données, mais au lieu d'importer en tant que fichiers texte, importé en tant que "à partir de HTML". Cette fois, il a ignoré les LF dans les chaînes citées.

0
user3861859

Dans mon cas, ouvrir CSV dans Notepad ++ et ajouter SEP="," en tant que première ligne me permet d'ouvrir CSV avec des sauts de ligne et utf-8 dans Excel sans problème.

0
adax2000

Sous MacOS, essayez d’utiliser Numbers

Si vous avez accès à Mac OS, j’ai constaté que la feuille de calcul AppleNumberspermet de désélectionner un fichier CSV complexe contenant plusieurs lignes qu’Excel ne pouvait pas gérer. Ouvrez simplement le .csv with Numbers, puis exportez-le vers Excel.

0
Tim