Mise en forme d'un fichier CSV délimité par des virgules pour obliger Excel à interpréter la valeur en tant que chaîne

64

Je cherche depuis un moment à trouver comment sortir un fichier CSV de manière à forcer Excel à interpréter les valeurs sous forme de chaîne et à ne pas essayer de les convertir en chiffres ou en dates.

par exemple:

"141", "10/11/2002", "350.00", "1311742251"

Excel tente de convertir "intelligemment" tous ceux-ci dans ses formats de date / nombre natifs. Y a-t-il un moyen de contourner cela?


EDIT: Clarifié l'intention de ma question, désolé pour la confusion.

Simon East
la source

Réponses:

67

Pour ceux qui ont le contrôle sur les données source, apparemment, Excel détectera automatiquement le format d'un champ CSV sauf si la colonne CSV est dans ce format:

"=""Data Here"""

par exemple...

20,       5.5%,      "0404 123 351", "3-6",  "=""123"""
[number]  [percent]  [number]        [date]  [string]  <-- how Excel interprets

Cela fonctionne également dans Google Spreadsheet, mais ne sait pas si d'autres applications de tableur prennent en charge cette notation.

Si vous pensez que les données peuvent contenir des guillemets, vous devez les échapper deux fois, comme ceci ...

"=""She said """"Hello"""" to him"""



(EDIT: mis à jour avec des corrections, merci DMA57361!)

Simon East
la source
Génial, nous avons juste besoin de changer les données .. soupir
cher
4
Cette dernière colonne devrait être "=""123"""sinon elle est mal formée. Les champs contenant un "doivent être délimités et le "s du champ échappé avec d'autres "s.
DMA57361
@ DMA57361, en fait, sa façon de procéder est correcte, ce sont les deux autres champs à côté desquels il manque le signe égal précédé. Ce qu'il a mis là, c'est de définir la formule de cette cellule pour renvoyer une chaîne. Pour éviter cela également, vous pouvez définir le type de données de la cellule sur "Texte".
Percée
2
@Breakthrough cette table représente un fichier CSV, pas des champs Excel. La dernière valeur ="123"n'est pas un champ CSV valide car il contient le caractère de délimiteur de champ " sans le délimiter correctement ni le champ. Le fait qu’Excel l’ait lu sous forme de formule relève de la compétence exclusive d’Excel et n’a rien à voir avec le fichier CSV.
DMA57361
2
@PriceChild, le but de ma question initiale (que je n'avais pas très bien expliquée) était en fait de savoir comment formater le fichier CSV pour le rendre aussi simple que possible pour les utilisateurs. Et voici la réponse que je me suis trouvée et que je voulais poster. Le DMA57361 a également apporté une correction utile, merci!
Simon East
36

Comme beaucoup, je me suis battu avec les mêmes décisions que Microsoft et j'ai essayé diverses solutions suggérées.

Pour Excel 2007, ce qui suit va:

  • Mettre toutes les valeurs entre guillemets n'aide en rien
  • Mettre un = avant toutes les valeurs après les avoir mises en double couche aide, mais rend le fichier csv inutile pour la plupart des autres applications
  • Mettre des parenthèses autour des guillemets autour de toutes les valeurs est une foutaise
  • Mettre un espace avant toutes les valeurs avant de mettre les guillemets doubles autour d'eux empêche la conversion en dates, mais n'empêche pas la réduction des zéros au début ou à la fin.
  • Mettre un guillemet simple devant une valeur ne fonctionne que lors de la saisie de données dans Excel.

Pourtant:

Le fait de placer un onglet avant toutes les valeurs avant de mettre les guillemets doubles empêche la conversion en dates ET empêche la suppression des zéros au début ou à la fin, et la feuille ne montre même pas de mauvais avertisseurs dans le coin supérieur gauche de chaque cellule.

Par exemple:

"<tab character><some value>","<tab character><some other value>"

Notez que le caractère de tabulation doit figurer entre les guillemets. Edit: il s’avère que les guillemets ne sont même pas nécessaires.

Un double clic sur le fichier csv peut ouvrir le fichier en tant que feuille de calcul dans Excel affichant toutes les valeurs traitées comme ci-dessus, comme les données de texte. Assurez-vous de configurer Excel pour utiliser le '.' comme le point décimal et non le ',' ou chaque ligne du fichier csv se terminera par un texte dans la première cellule de chaque ligne. Apparemment, Microsoft pense que CSV signifie "pas le point décimal", valeur séparée.

ajabo
la source
Cette astuce de tabulation m'a sauvé la journée, Excel convertissait des valeurs numériques très longues en nombres et perdait tous les chiffres après le 15. Géré pour obtenir Excel pour les traiter comme du texte avec le préfixe de tabulation. Cela fonctionne donc aussi bien pour les chiffres que pour les dates.
Markus Yrjölä
C'est vraiment utile, merci!
Flavio
22

L'utilisation de la fonctionnalité d'importation d'Excel vous permet de spécifier le format (automatique, texte ou date) de chaque colonne à interpréter et ne nécessite aucune modification des fichiers de données.

Vous pouvez le trouver sous DataGet External DataFrom Textdans Excel 2007/2010.
Ou DataImport External DataImport Datadans Excel 2003.

Voici une image de l'assistant d'importation de texte Excel 2003 en action sur les exemples de données donnés, montrant l'importation des deux dernières colonnes sous forme de texte:

Excel 2003: Assistant d'importation de texte à l'étape 3 - types de données

DMA57361
la source
Excellente réponse DMA57361, merci pour tous les détails. Ce que je n'ai pas vraiment mentionné dans ma question, c'est que j'écris un script qui exporte des données vers Excel. J'essayais donc d'empêcher les utilisateurs d'avoir à passer par des options aussi confuses que celle-ci. Mais vous avez quand même voté. :-)
Simon East
@Simon, qu'est-ce que tu écris le script? Tout moyen de le faire produire directement des fichiers Excel, au lieu de passer par un format intermédiaire?
DMA57361
c'est un script PHP qui exporte une table de base de données. Le format CSV est probablement le plus facile à utiliser, mais vous avez raison, je pourrais probablement produire un fichier XLS à l'aide d'un code source ouvert, ou même simplement un tableau HTML qui, à mon avis, produit des résultats raisonnables sous Excel (permet couleurs et formatage, etc., mais vous n'êtes pas sûr des types de données).
Simon East
1
Il y a quelques questions sur SO → PHP → Excel, les premières que j'ai essayées ont toutes une réponse pointant vers PHP Excel , il vaudrait donc la peine d'y jeter un coup d'œil.
DMA57361
c'est très utile, après avoir lu quelques années
greg121
1

L'exemple de Simon n'a pas fonctionné pour moi et je suppose que c'est une différence de langue. En C #, voici à quoi ressemble ma chaîne de format de travail:

var linebreak = (i++ == list.Count) ? "" : "\r\n";

csv += String.Format("=\"{0}\",{1},{2},{3},=\"{4}\"{5}",
    item.Value, item.Status, item.NewStatus, item.Carrier, c.Status, linebreak);

et voici à quoi ressemble le fichier de sortie:

="abababababab",INVALID,INVALID,USPS,="",
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793000216184",UNKNOWNSTATUS,INVALID,USPS,=""

Comme on peut le constater, le format du fichier de sortie n’est ="VALUE",pas, à "=""VALUE""",mon avis, une convention Visual Basic.

J'utilise Excel 2010. Incidemment, Google Sheets n'ouvrira / convertira pas un fichier formaté de cette manière. Cela fonctionnera si vous supprimez le signe égal ainsi "VALUE",- Excel ouvrira toujours le fichier mais ignorera le fait que vous voulez que vos colonnes soient des chaînes.

Shane
la source
-2

Un moyen simple de forcer Excel à interpréter la date en tant que texte consiste à mettre un guillemet simple devant la date, au lieu d'utiliser des guillemets entiers, comme dans:

'10 / 11/2002

Si vous pouvez importer le fichier CSV au lieu de l'ouvrir, vous pouvez indiquer à Excel le format de chaque colonne. Regardez cette question que j'ai posée .

hdhondt
la source
5
Rétrogradé parce que cela ne fonctionne pas dans les fichiers CSV importés dans Excel. Excel interprète la citation comme une citation littérale et l'affiche donc dans la cellule.
Psynnott le