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.
Pour ceux qui ont le contrôle sur les données source, apparemment, Excel détectera automatiquement le format d'un champ CSV à moins que la colonne CSV ne soit 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 des données peuvent contenir des guillemets, vous devez double-escape them, comme ceci ...
"=""She said """"Hello"""" to him"""
(EDIT: mis à jour avec corrections, merci DMA57361!)
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:
Toutefois:
Le fait de placer un onglet avant toutes les valeurs avant de mettre les guillemets doubles empêche les conversions 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 indicateurs 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 '.' en tant que 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.
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 la forme Data
→ Get External Data
→ From Text
dans Excel 2007/2010.
Ou Data
→ Import External Data
→ Import Data
dans Excel 2003.
Voici une image de l'importation de texte Excel 2003 Wizard en action sur les exemples de données donnés, montrant l'importation des deux dernières colonnes sous forme de texte:
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 est ="VALUE",
et non "=""VALUE""",
, ce qui, à mon avis, pourrait être 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.