web-dev-qa-db-fra.com

CSV pour Excel, y compris les zéros et les virgules

Je souhaite générer un fichier CSV permettant à l'utilisateur d'utiliser Excel pour l'ouvrir.

Si je veux échapper la virgule dans les valeurs, je peux l'écrire sous la forme "640,480".

Si je veux conserver les zéros en tête, je peux utiliser = "001234".

Mais si je veux conserver les deux virgules et virgule dans la valeur, l'écriture as = "001,002" sera scindée en deux colonnes. Il semble qu'aucune solution pour exprimer les données correctes.

Est-il possible d'exprimer 001, 002 dans CSV pour Excel?

26
Darkthread

La réponse de Kent Fredric contient la solution:

   "=" "001,002" ""

(Je prends la peine d'afficher cela séparément, car la réponse de Kent ne dit pas clairement que c'est une solution Excel valide.)

31
John Y

Mettez un préfixe String sur vos données: 

 "N001,002","N002,003" 

(Tant que ce préfixe n'est pas un E) 

Cette notation (au moins sous OpenOffice) ci-dessus analyse au total 2 colonnes avec les octets N001.002 correctement stockés. 

La spécification CSV indique que, est autorisée dans les chaînes de devis. 

En outre, un avertissement d'expérience: assurez-vous de le faire également avec des numéros de téléphone. Sinon, Excel interprétera les numéros de téléphone comme des nombres à virgule flottante et les enregistrera en notation scientifique: /, et 1.800E10 n’est pas un très bon numéro de téléphone. 

Sous OpenOffice, ce bloc RawCSV se décode également comme prévu: 

  "=""001,002""","=""002,004"""

c'est à dire: 

   $rawdata = '001,002'; 
   $equation = "=\"$rawdata\"";
   $escaped = str_replace('"','""',$equation); 
   $csv_chunk = "\"$escaped\"" ; 
5
Kent Fredric

Faire

"""001,002"""

J'ai découvert ceci en tapant "001,002" puis en faisant un fichier CSV dans Excel. Si ce n'est pas exactement ce que vous voulez (vous ne voulez pas de citations), cela pourrait être un bon moyen pour vous de trouver ce que vous voulez.

Une autre option pourrait être d'utiliser du texte délimité par des tabulations, s'il s'agit d'une option pour vous.

4
Nick Fortescue

Un lecteur de mon blog a trouvé une solution, = "001" & CHAR (44) & "002", cela semble fonctionner sur ma machine!

2
Darkthread

Joli vieux fil, mais pourquoi ne pas simplement ajouter des espaces après votre valeur. Il sera alors traité comme une chaîne et aucun zéro ne sera supprimé.

"001,002". ""

1
Sparky

Comme personne ne l’avait déjà mentionné, je me suis dit que cela valait la peine de le mentionner dans cet ancien post. 

Si vous ajoutez un caractère de tabulation horizontal \t avant le nombre, MS Excel affichera également les zéros de gauche. Et le caractère de tabulation n'apparaît pas dans la feuille Excel. Même s'il est entouré de guillemets doubles. (F.e. \"\t001,002\")

Il semble également plus agréable dans Notepad ++, comparé à mettre un \0 aka NULL avant un tel nombre.

1
LukStorms

Toutes les réponses suggérées ne semblent pas fonctionner pour moi pour le moment ("=" "blahblah" "" et autres) dans toutes les versions Excel actuelles ou dans l'application Numbers sous OS X.

La seule solution que j'ai trouvée en bidouillant consiste à ajouter un caractère null échappé au début de la chaîne (qui est\0 dans les langues basées sur PHP ou C). Tout finit par être traité tel quel sans être calculé ni traité par le logiciel lors de l’ouverture de la feuille de calcul.

echo "\0" . $data;
0
David Lapointe

Excel utilise une mise en forme par défaut pour les colonnes CSV en fonction du contenu. Donc, si vous avez 001 dans un csv, Excel le mettra automatiquement à 1. 

Le seul moyen de conserver les zéros à gauche dans Excel à partir d'un fichier csv est de modifier l'extension du fichier csv en .txt, puis d'ouvrir Excel, de cliquer sur ouvrir, de sélectionner le fichier txt. L'assistant d'importation de texte s'affiche. . Sélectionnez votre format csv (séparé par des virgules), puis assurez-vous de sélectionner "Texte" comme format.

Et voilà, vous pouvez maintenant exporter les données CSV précédentes vers n’importe quel autre tout en conservant les zéros non significatifs.

0
Bayi

Si vous examinez davantage la feuille de calcul Excel, vous constaterez que vous ne pouvez pas utiliser CSV.

Ce site http://office.Microsoft.com/en-us/Excel/HP052002731033.aspx dit: "Si les cellules affichent des formules au lieu de valeurs, les formules sont converties en texte. et le contenu de la feuille de calcul est perdu. Le symbole de l’euro sera converti en point d’interrogation. "

Cependant, vous pouvez changer la façon dont vous le chargez pour obtenir le résultat souhaité. Voir cette page Web: Microsoft importer un fichier texte .

L'important est de choisir Importer des fichiers texte de données d'import-données externes, puis Suivant, Suivant, puis cochez la case "Texte" dans le format de données de la colonne. Cela évitera qu'il soit interprété comme un nombre et que le formatage soit perdu.

0
Nick Fortescue

Je bidouillais avec les fichiers CSV vers Excel (j’utilise PHP pour créer le fichier CSV, mais j’imagine que cette solution fonctionne dans n’importe quel langage. Lorsque vous remarquez que les caractères principaux (tels que +, - ou 0 disparaissent , créez le fichier CSV avec chr(13) comme préfixe. Il s’agit d’un caractère non imprimable qui fonctionne à merveille avec ma version Excel Office 2010. J’ai essayé d’autres caractères non imprimables, mais sans succès.

j'utilise donc la solution Internet Chirp, mais je l'ai modifié avec mon préfixe:

if (preg_match("/^0/", $str) || preg_match("/^\+?\d{8,}$/", $str) || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str)) {
    $str = chr(13)."$str";
}
0
dubversion

C’est simple en utilisant la fonctionnalité Power Query d’Excel qui vous permet d’effectuer des transformations pas à pas.

Fichier d'origine:

 enter image description here

Ajouter une colonne personnalisée:

 enter image description here

0
asporter

Si vous utilisez "Content-Disposition" et exportez d'asp vers Excel à l'aide de balises HTML, vous devez ajouter "style = 'mso-number-format:\@;'" à cette balise et accepter uniquement les valeurs de texte. , l'omission de zéros sera donc évitée. Si la barre oblique "\" est acceptée, utilisez la barre oblique double "\"

0
ManojKumar