Importation CSV Excel traitant les chaînes de nombres entre guillemets comme des valeurs numériques, pas des chaînes

13

J'ai une application Web qui exporte ses données dans un fichier CSV. Voici un exemple de ligne du fichier CSV en question:

28,"65154",02/21/2013 00:00,"false","0316295","8316012,8315844","MALE"

Comme je ne peux pas publier une image, je vais devoir expliquer les résultats dans Excel. Le champ "0316295" est transformé en nombre et le 0 de tête disparaît. Le "8316012,8315844" est interprété comme un seul numéro: 83,160,128,315,844. Ce n'est évidemment pas le résultat escompté.

J'ai vu des gens recommander une citation unique pour ces cas, mais cela ne fonctionne pas vraiment non plus.

28,"65154",02/21/2013 00:00,"false","'0316295","'8316012,8315844","MALE"

Le guillemet simple est visible à tout moment dans la cellule dans Excel, bien que si j'entre moi-même un nombre avec un guillemet simple de tête, il affiche uniquement la chaîne prévue et non le guillemet simple avec la chaîne.

L'importation n'est pas la même chose que la frappe, semble-t-il.

Quelqu'un a une solution ici?

Michael Oryl
la source
Pouvez-vous l'importer en utilisant LibreOffice ou quelque chose de ce genre? Je viens d'importer et j'ai: 28 65154 21/02/2013 00:00 false 0316295 8316012,8315844 MALE (si vous pouvez lire ça ...?)
FreudianSlip
Cette question est similaire et offre de bonnes solutions: superuser.com/questions/234997/…
Brad Patton
@FreudianSlip Non, nous ne pouvons pas utiliser de solution tierce. Les utilisateurs cliquent sur le bouton "télécharger CSV" et le fichier s'ouvre dans Excel. C'est l'environnement auquel nous avons affaire. Je ne peux pas vraiment le compliquer.
Michael Oryl
@Brad J'ai lu ce post plus tôt à la recherche de solutions. C'est de là que vient l'option de guillemet simple, ce que je n'aime vraiment pas car Excel affiche le devis dans la cellule elle-même lors de son importation depuis CSV (même si elle ne l'affiche pas si vous tapez la même chose en vous-même).
Michael Oryl
contrôlez-vous au moins l'application Web? comment allez-vous mettre en œuvre la solution de manière transparente pour les utilisateurs? J'ai mis à jour ma réponse pour qu'elle gère correctement les valeurs avec des virgules
Alex P.

Réponses:

10

Cela devrait fonctionner

28,"65154",02/21/2013 00:00,"false",="0316295","=""8316012,8315844""","MALE"
Alex P.
la source
Non, cela réduit la valeur avec deux nombres. Nous obtenons = "1234567 sans guillemet de fermeture. Cela fonctionne pour les nombres plus simples, cependant.
Michael Oryl
1
si vous contrôlez l'application Web, vous pouvez implémenter l'exportation au format SYLK en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK) . il a un bien meilleur contrôle de la représentation des données. sinon - vous pourriez facilement faire un script de conversion
Alex P.
2
a mis à jour la réponse pour qu'elle gère correctement les valeurs avec des virgules
Alex P.
Cela a géré correctement les valeurs séparées par des virgules. Merci.
Michael Oryl
Merci. Cette solution a également résolu un problème d'importation de nombres hexidécimaux. Excel remplace 00E3par 0 (0 * 10 ^ 3) et l'affiche sous forme de notation sci (0,00E + 00). Il fait en fait la même chose "00e3"sans =. Mais ="00e3"fonctionne parfaitement. (ouverture d'un CSV avec Excel 2010)
mpag
12

Pour conserver le (s) zéro (s) en tête, vous pouvez définir le format de cette colonne spécifique sur Texte dans l'Assistant Importation de texte.

  1. Démarrez l' assistant d'importation de texte en accédant à l' onglet Données et en cliquant sur À partir du texte .
  2. Sélectionnez le fichier CSV que vous souhaitez importer.
  3. Choisissez Délimité et appuyez sur Suivant .
  4. Décochez l' onglet (par défaut). Choisissez virgule . Assurez-vous que Text Qualifier est défini sur ". Cliquez sur Suivant .
  5. C'est ici que vous pouvez spécifier les formats . Cliquez sur l'en-tête de la colonne dont vous souhaitez conserver le (s) zéro (s) de tête. Sélectionnez Texte . (Voir l'image ci-dessous)

    entrez la description de l'image ici

  6. Appuyez sur Terminer, puis sélectionnez un emplacement approprié pour vos données. Exemple de résultat:

    entrez la description de l'image ici

Edit : Il y a une autre façon ; faites exporter l'application Web vers un fichier .TXT délimité par des virgules au lieu de .CSV (ou modifiez simplement l'extension du fichier exporté après l'avoir enregistré). Cela oblige Excel à passer par l'assistant d'importation lorsqu'ils ouvrent le fichier. Comme avantage supplémentaire, il réduit les chances que les utilisateurs modifient ou falsifient vos données brutes d'origine.

Ellesa
la source
1
Oui, c'est certainement vrai. Ce n'est tout simplement pas vraiment pratique pour l'utilisateur final quand, en comparaison, tout ce qu'ils ont à faire est de cliquer sur le lien du générateur CSV sur notre application Web et Excel le charge automatiquement - bien qu'avec les problèmes mentionnés ci-dessus. Les fichiers CSV sont configurés pour s'ouvrir dans Excel, et Excel n'offre aucune option pour le moment. Il les charge simplement. Je vous remercie toutefois de le souligner.
Michael Oryl
1
Il existe une autre façon, mais je ne sais pas si c'est possible dans votre cas: demandez à l'application Web d'exporter vers délimité par des virgules .TXTau lieu de .CSV(ou changez simplement l'extension de fichier du fichier exporté). Ce type de "force" les utilisateurs à passer par l'assistant d'importation lorsqu'ils ouvrent le fichier.
Ellesa
C'est un très bon point. Merci d'avoir fait remarquer cela. Cela pourrait être utile à l'avenir.
Michael Oryl
4

Excel traite les valeurs numériques commençant par un caractère de tabulation comme du texte.

<tabchar>000000100000200000,ABC,DEF

Apparaîtra comme:

000000100000200000|ABC|DEF

| est la limite de la cellule (à des fins d'illustration). Ainsi, par exemple, si votre système génère le fichier CSV à l'aide du jeu de caractères utf-8, vous pouvez ajouter le &#x0009;(Tab Tab in Hex) avant votre valeur numérique pour forcer Excel à l'interpréter comme du texte.

Madeyedexter
la source
Supprimez l'espace avant le point-virgule dans la représentation hexadécimale. Je ne sais pas comment échapper au caractère Hex Tab dans la réponse, j'ai donc délibérément mal tapé.
Madeyedexter
1
J'ai fait l'évasion. Et j'ai appris quelque chose de nouveau, merci. Je dois ajouter ceci à mon sujet préféré pour le travail :)
nixda
3

Excel détectera automatiquement le format d'un champ CSV, sauf si la colonne CSV est dans ce format:

"=""Data Here"""

Cela fonctionne également pour les feuilles Google

Chris Halcrow
la source
0

Vous devez utiliser la fonctionnalité "Données -> Obtenir des données externes -> Importer du texte à partir d'un fichier" dans Excel pour l'afficher sous forme de texte. Il s'agit de l'assistant d'importation de texte @Kaze mentionné.

La seule façon de forcer Excel à afficher des nombres sous forme de texte à partir de l'entrée, sans que l'utilisateur n'ait rien à faire, est de sortir un fichier Excel et de spécifier un "format numérique personnalisé". Je recommande d'utiliser une bibliothèque d'exportation XLS pour cela, car cela ne semble pas aussi simple que d'ajouter une ligne de texte de configuration dans un fichier CSV.

Magne
la source
0

essayez la fonction propre pour les valeurs qui sont gâchées. Par exemple = nettoyer ("12345678901234567890"). Cela fonctionne pour moi pour les nombres, les dates, les heures, etc. Je voudrais avertir que puisque ce n'est pas du tout le but de cette fonction que cela pourrait cesser de fonctionner avec de nouvelles versions, etc.

Mark Prather
la source