O Excel adiciona aspas duplas na exportação csv [duplicada]

6

Estou com um comportamento estranho e desconhecido no excel. A planilha que eu quero exportar para um arquivo csv consiste em 4 colunas com dados como este:

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

Agora, o que acontece é que, se a última coluna contendo o texto tiver cota dupla nele, o Excel adicionará outra aspas duplas a ele para cada aspas duplas já existentes.

Exemplo:

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

É transformado em

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

Observe as duplas extras no início e no final, que claramente não deveriam estar lá. esses dados são inseridos em um banco de dados e usados como recursos de texto para globalização. Se eu renderizar um controle literal com essas aspas duplas, a funcionalidade será quebrada.

Como posso suprimir esse comportamento no Excel?

    
por Marco 20.01.2015 / 14:39

3 respostas

7

As cotações são padrão para CSV quando os campos incluem espaços (como no seu caso).

Normalmente, você escreveria todo o seu CSV com aspas (e escaparia das aspas que deseja manter com DUAS citações "" ):

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

Aqui está uma explicação completa, incluindo referências específicas ao tratamento do Excel: link

Mas pode ser difícil conseguir o que você deseja se você não controlar a exportação do Excel e não controlar o programa de importação. Você pode ter que ajustar o arquivo de texto no meio do processo.

    
por 20.01.2015 / 14:46
3

Isso está bem documentado e é realmente um comportamento esperado. No entanto, contornar isso parece complicado, e eu posso pensar em apenas trabalhar ao redor.

A solução parece ser a de abrir o arquivo exportado e localizar e substituir as marcas de citação com nada (para remover as marcas de aspas).

Se você precisar de mais controle (por exemplo, você pode querer as marcas de citação em algumas occaisons) então você tem que fazê-lo manualmente ou hackear - adicione uma única palavra-chave onde você quer que "exista" mas, em vez disso, qwertquote (já que esta string será única, você poderá encontrá-la e substituí-la por uma marca de aspas) ou, escreva um aplicativo utilitário para fazer isso por você, já que você tem experiência em programação.

Existe algum código do link

Text files with no modification

This macro will output a text file without surrounding cells which have commas in quotation marks, or doubling quotation marks in the text:

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
    
por 20.01.2015 / 14:56
2

Da Wikipedia: link

Fields with embedded commas or double-quote characters must be quoted.

1997, Ford, E350, "Super, luxurious truck"

e

Each of the embedded double-quote characters must be represented by a pair of double-quote characters.

1997, Ford, E350, "Super, ""luxurious"" truck"

Portanto, um arquivo csv precisa dessas aspas duplas para serem escapadas (usando outro conjunto de aspas duplas), porque as aspas duplas denotam os limites de um campo.

    
por 20.01.2015 / 18:07