Je travaille sur une fonctionnalité pour 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 guillemets, etc. Afin de contrer cela, j'ai entouré le champ de guillemets doubles (").
Cependant, lorsque j'importe les données dans Excel 2007, définissez le délimiteur approprié et définissez le qualificatif de texte sur guillemet double, les sauts de ligne créent toujours de nouveaux enregistrements aux sauts de ligne, où je m'attendrais à voir tout le champ de texte dans un unicellulaire.
J'ai aussi essayé de remplacer CR / LF (\ r \ n) par juste CR (\ r), et encore une fois par juste LF (\ n), mais pas de chance.
Quelqu'un d'autre a-t-il rencontré ce problème, et si oui, comment l'avez-vous résolu?
TIA,
-J
EDIT:
Voici un fichier rapide que j'ai écrit à la main pour dupliquer le problème.
ID, nom, description
"12345", "Smith, Joe", "Hey.
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 ne sont que les sauts de ligne qui causent des problèmes.
la source
Réponses:
Excel (au 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 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 correctement importé: les retours à la ligne commencent une nouvelle ligne même lorsqu'ils sont cités. Si j'ouvre ce fichier en double-cliquant dessus dans une fenêtre de l'Explorateur, alors il s'ouvre correctement sans l'intervention de l'assistant.
la source
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 (ouvert dans l'éditeur), puis exécutez "texte dans les colonnes" -> ne fonctionne pas, d'accord.
Allez à l'onglet suivant et copiez / collez à nouveau (la même chose que vous avez déjà dans votre presse-papiers) -> fonctionne automatiquement maintenant.
la source
Si vous faites cela manuellement, téléchargez LibreOffice et utilisez LibreOffice Calc pour importer votre CSV. Il fait un bien meilleur travail de choses comme celle-ci que n'importe quelle version d'Excel que j'ai essayée, et il peut enregistrer au format XLS ou XLSX si nécessaire si vous devez transférer vers Excel par la suite.
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é:
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 marché. J'ai donc changé l'exemple pour qu'il ressemble à ceci et j'ai choisi l'encodage UTF-8 lors de l'enregistrement dans le Bloc-notes:
Mais il y a un hic! 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 j'ai choisi ce CSV, cela échoue toujours sur les nouvelles lignes entre guillemets.
Mais il y'à un autre hic! Le séparateur de champ de travail (virgule dans l'exemple d'origine, 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 à la place. J'ai accès à un autre ordinateur réglé sur les paramètres régionaux anglais britanniques, et sur cet ordinateur, le premier exemple avec un séparateur par virgule fonctionne très bien (uniquement en double-clic), et celui avec un point-virgule échoue! Voilà pour l'interopérabilité. Si vous souhaitez publier ce CSV en ligne et que les utilisateurs peuvent avoir Excel, je suppose que vous devez publier les deux versions et suggérer aux gens 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:
J'espère que cela aide quelqu'un.
la source
=FOO(1;2)
au lieu de=FOO(1,2)
), mais il est clairement incorrect qu'Excel l'applique à un analyseur de format de fichier (quel autre programme analyse un format de fichier standard dépendant des paramètres régionaux ??? )J'ai enfin trouvé le problème!
Il s'avère que nous écrivions le fichier en utilisant l'encodage Unicode, plutôt qu'en ASCII ou UTF-8. La modification de l'encodage sur le FileStream semble résoudre le problème.
Merci à tous pour toutes vos suggestions!
la source
Réponse courte
Supprimez les caractères de saut de 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 CSV tiers qui avait peut-être des problèmes d'encodage mais qui ne s'est 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 en 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.De toute évidence, une solution plus propre consiste à remplacer d'abord les vraies nouvelles lignes (
\r\n
) par une combinaison de caractères temporaires, en remplaçant les nouvelles lignes (\n
) par le caractère de séparation de votre choix (par exemple, une virgule dans un fichier point-virgule), puis en remplaçant à nouveau les caractères temporaires par des nouvelles lignes appropriées.la source
\n
entre les lignes et les\r\n
valeurs intérieures. Je viens de dépouiller ce dernier dans Notepad ++.+1 sur le commentaire de J Ashley. J'ai également 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", "Élément multiligne \ n Élément multiligne" \ r \ n "Test2", "Élément multiligne \ n Élément multiligne" \ r \ n
J'ai utilisé notepad ++ pour délimiter correctement chaque ligne et pour n'utiliser que des retours à la ligne dans la chaîne. J'ai découvert cela en créant des entrées multilignes dans un document Excel vierge et en ouvrant le csv dans notepad ++.
la source
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 de début entre la virgule (séparateur de champ) et les guillemets doubles. Par exemple:
Cassé:
Nom, Titre, Description
"Jean", "M.", "Ma description détaillée"
Travail:
Nom, Titre, Description
"John", "Mr.", "Ma description détaillée"
la source
Utilisez Google Sheets et importez le fichier CSV.
Ensuite, vous pouvez exporter cela pour l'utiliser dans Excel
la source
Si quelqu'un trébuche sur ce fil et cherche une réponse définitive, c'est ici (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) Enregistrer en tant que fichier ODS 5) Ouvrir le fichier ODS dans Excel 6) Enregistrer sous .xls (x) 7) Terminé.8) Cela a parfaitement fonctionné pour moi et m'a sauvé BIGTIME!
la source
Collez dans Notepad ++, sélectionnez Encoding> Encode in ANSI, copiez tout à nouveau et collez dans Excel :)
la source
J'avais un problème similaire. J'avais des données Twitter dans MySQL. Les données avaient un saut de ligne (LF ou \ n) avec dans les données. J'avais besoin d'exporter les données MySQL dans Excel. Le LF gâchait mon importation de fichier csv. Alors j'ai fait ce qui suit -
REMARQUE- Lors du remplacement de CRLF ou LF, n'oubliez pas de cocher Excended (\ n, \ r, \ t ... Case à cocher [regardez en bas à gauche de la boîte de dialogue)
la source
Mon expérience avec Excel 2010 sur WinXP avec les paramètres régionaux français
la source
Excel est incroyablement cassé lorsqu'il s'agit de CSV. LibreOffice fait un bien meilleur travail. Alors, j'ai découvert que:
la source
Aperçu
Près de 10 ans après la publication originale, Excel ne s'est pas amélioré dans l'importation de fichiers CSV. Cependant, j'ai trouvé qu'il était beaucoup mieux d'importer des tableaux HTML. Ainsi, on peut utiliser Python pour convertir CSV en HTML, puis importer le HTML résultant dans Excel.
Les avantages de cette approche sont les suivants: (a) elle fonctionne de manière fiable, (b) vous n'avez pas besoin d'envoyer vos données à un service tiers (par exemple, Google Sheets), (c) aucune installation "lourde" supplémentaire requise (LibreOffice, Nombres, etc.) pour la plupart des utilisateurs, (d) niveau plus élevé que de se mêler des caractères CR / LF et des marqueurs de nomenclature, (e) pas besoin de jouer avec les paramètres régionaux.
Pas
Les étapes suivantes peuvent être exécutées sur n'importe quel shell de type bash tant que Python 3 est installé. Bien que Python puisse être utilisé pour lire directement CSV, csvkit est utilisé pour effectuer une conversion intermédiaire en JSON. Cela nous permet d'éviter d'avoir à gérer les subtilités CSV dans notre code Python.
Tout d'abord, enregistrez le script suivant sous
json2html.py
. Le script lit un fichier JSON à partir de stdin et le vide sous forme de tableau HTML:Ensuite, installez csvkit dans un environnement virtuel et utilisez
csvjson
pour alimenter le fichier d'entrée dans notre script. C'est une bonne idée de désactiver la prédiction du type de cellule avec l'-I
argument:Maintenant,
output.html
peut être importé dans Excel. Les sauts de ligne dans les cellules seront conservés.Vous pouvez éventuellement nettoyer votre environnement virtuel Python:
la source
Ceci est pour Excel 2016:
J'ai juste eu le même problème avec les sauts de ligne dans un fichier csv avec l'assistant Excel.
Ensuite, je l'ai essayé avec la fonctionnalité "Nouvelle requête": Données -> Nouvelle requête -> À partir d'un fichier -> À partir de CSV -> Choisissez le fichier -> Importer -> Charger
Cela fonctionnait parfaitement et une solution de contournement très rapide pour vous tous qui avez le même problème.
la source
Ce qui a juste fonctionné pour moi, importer directement dans Excel à condition que l'importation se fasse au format texte plutôt qu'au format csv. M /
la source
créez simplement une nouvelle feuille avec des cellules avec saut de ligne, enregistrez-la dans csv puis ouvrez-la avec un éditeur qui peut 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 tandis qu'une "vraie" fin de ligne est un code avec CR LF. Voilà, vous savez maintenant comment générer un fichier csv "correct" pour Excel.
la source
J'ai aussi eu ce problème: c.-à-d., Les fichiers csv (délimités par des virgules, chaînes délimitées par des guillemets doubles) avec LF entre guillemets. Il s'agissait de fichiers Square téléchargés. J'ai fait une importation de données mais au lieu d'importer sous forme de fichiers texte, importés en tant que "depuis HTML". Cette fois, il a ignoré les LF dans les chaînes entre guillemets.
la source
Cela a fonctionné sur Mac, en utilisant csv et en ouvrant le fichier dans Excel.
Utilisation de python pour écrire le fichier csv.
data = '"première ligne de la cellule a1 \ r 2ème ligne de la cellule a1 \ r 3ème ligne de la cellule a1", "cellule b1", "1ère ligne de la cellule c1 \ r 2ème ligne de la cellule c1" \ n "première ligne de cellule a2 "\ n '
file.write (données)
la source
Sur MacOS, essayez d'utiliser les nombres
Si vous avez accès à Mac OS, j'ai trouvé que la feuille de calcul Apple Numbers fait un bon travail pour décoller un fichier CSV multiligne complexe qu'Excel ne pourrait pas gérer. Ouvrez simplement le
.csv
avec des nombres, puis exportez vers Excel.la source
Dans mon cas, ouvrir CSV dans notepad ++ et ajouter
SEP=","
comme première ligne me permet d'ouvrir CSV avec des sauts de ligne et utf-8 dans Excel sans problèmesla source
Remplacez le séparateur par TAB (\ t) au lieu de virgule (,). Ensuite, ouvrez le fichier dans votre éditeur (Bloc-notes, etc.), copiez le contenu à partir de là, puis collez-le dans le fichier Excel.
la source
Les sauts de ligne entre guillemets doubles conviennent parfaitement à la norme CSV. L'analyse des sauts de ligne dans Excel dépend du paramètre OS du séparateur de liste:
Windows: vous devez définir le séparateur de liste sur virgule (Région et langue »Formats» Avancé) Source: /superuser/238944/how-to-force-excel-to-open-csv-files- avec-données-disposées-en-colonnes # answer-633302
Mac: besoin de changer la région en États-Unis (puis de modifier manuellement les autres paramètres selon vos préférences) Source: https://answers.microsoft.com/en-us/mac/forum/macoffice2016-macexcel/line-separator-comma -semicolon-in-excel-2016-for / 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 répliqué avec succès le problème et j'ai pu le résoudre en utilisant ce qui précède dans Max et Windows.
la source