web-dev-qa-db-fra.com

Excel ajoute des guillemets doubles lors de l'exportation au format csv

Je rencontre un comportement inconnu étrange dans Excel. La feuille que je veux exporter dans un fichier csv est composée de 4 colonnes avec des données comme celle-ci:

site.aspx|de|lblChanges.Text|some text that will be used somewhere

Maintenant, ce qui se passe, c’est que si la dernière colonne contenant le texte contient des guillemets doubles, Excel lui ajoute un autre guillemet double pour chaque guillemet double déjà contenu.

Exemple:

site.aspx|de|lblChanges.Text|some text that will used somewhere <a href="/clickety.aspx">here</a>

Se transforme en

site.aspx|de|lblChanges.Text|"some text that will used somewhere <a href="/clickety.aspx">here</a>"

Notez les doubles guillemets supplémentaires au début et à la fin, qui ne devraient évidemment pas être là. ces données sont insérées dans une base de données et utilisées comme ressources textuelles pour la mondialisation. Si je rends un contrôle littéral avec ces guillemets supplémentaires, la fonctionnalité s'interrompt.

Comment puis-je supprimer ce comportement dans Excel?

6
Marco

Les citations sont standard pour CSV lorsque les champs incluent des espaces (comme dans votre cas).

Normalement, vous écrivez tout votre CSV avec des guillemets (et vous échappez des guillemets avec deux guillemets ""):

"field 1", "field 2", "field with ""escaped"" quotes"

Voici une explication complète incluant des références spécifiques à la gestion d'Excel: http://www.csvreader.com/csv_format.php

Cependant, il peut être difficile d’obtenir ce que vous voulez si vous ne contrôlez pas l’exportation Excel et le programme d’importation. Vous devrez peut-être modifier le fichier texte au milieu du processus.

7
pgr

Ceci est bien documenté et correspond au comportement attendu. Cependant, cela semble difficile, et je ne peux penser qu’à des solutions de rechange.

La solution semble être ouvrir le fichier exporté et rechercher et remplacer les guillemets par rien (pour supprimer les guillemets).

Si vous avez besoin de plus de contrôle (par exemple, vous voudrez peut-être les guillemets dans certaines occasions), vous devez le faire manuellement ou le pirater - ajoutez un mot clé unique à l'endroit où vous souhaitez que le "existe (par exemple, ne pas utiliser" mais qwertquote (puisque cette chaîne sera unique, vous pouvez la trouver et la remplacer par un guillemet) ou écrivez un utilitaire pour le faire à votre place, car vous avez de l'expérience en programmation.

Il y a du code provenant de http://www.mcgimpsey.com/Excel/textfiles.html#csvwithquotes

Fichiers texte sans modification

Cette macro produira un fichier texte sans les cellules environnantes qui ont des virgules entre guillemets, ou qui double les guillemets dans le texte:

Public Sub TextNoModification()
    Const DELIMITER As String = "," 'or "|", vbTab, etc. 
    Dim myRecord As Range
    Dim myField As Range
    Dim nFileNum As Long
    Dim sOut As String

    nFileNum = FreeFile
    Open "Test.txt" For Output As #nFileNum
    For Each myRecord In Range("A1:A" & _
            Range("A" & Rows.Count).End(xlUp).Row)
        With myRecord
            For Each myField In Range(.Cells(1), _
                    Cells(.Row, Columns.Count).End(xlToLeft))
                sOut = sOut & DELIMITER & myField.Text
            Next myField
            Print #nFileNum, Mid(sOut, 2)
            sOut = Empty
        End With
    Next myRecord
    Close #nFileNum
End Sub
3
Dave

De Wikipedia: http://en.wikipedia.org/wiki/Comma-separated_values ​​

Les champs avec des virgules ou des guillemets incorporés doivent être entre guillemets.

1997, Ford, E350, "Super, camion luxueux"

et

Chaque caractère entre guillemets incorporés doit être représenté par une paire de caractères entre guillemets.

1997, Ford, E350, "Super", "camion de luxe"

Ainsi, un fichier csv a besoin de ces guillemets doubles pour être échappés (en utilisant un autre ensemble de guillemets doubles), car le guillemet double seul désigne les limites d'un champ.

3
Brian J