Como salvar aspas duplas e ponto-e-vírgula em um arquivo csv ao abrir o arquivo no Excel 2010?

4

Eu recebo um arquivo CSV do sever. Os dados dentro dele são delimitados por ponto-e-vírgula e estão no formato UTF-8. Por exemplo, os dados que recebemos são:

 "NL 我喜"" mutilple""我喜"

Quando abrirmos pela primeira vez em Excel 2010 , será exibido como

NL 我喜" mutilple"我喜

Mas quando modifico (acabei de remover a letra L do texto acima) este arquivo e salve-o como CSV usando o excel e abra-o pela segunda vez, ele se parecerá com

N inbetween我喜 (sem aspas duplas)

Eu quero que os dados após a modificação sejam salvos com aspas duplas.

Obrigado

    
por NJMR 17.05.2017 / 14:44

3 respostas

0

Eu escrevi uma Macro VBA e a lógica é:

  1. Se houver qualquer double quote na célula de dados, duplique as aspas duplas.
  2. Se houver qualquer comman ou double quote presente na célula de dados, coloque os dados inteiros entre aspas duplas.

Exemplo:

  • Etapa 1: NL 我喜" mutilple"我喜 se tornará NL 我喜"" mutilple""我喜
  • Etapa 2: após a etapa 2, os dados se tornarão "NL 我喜"" mutilple""我喜"

Este código corresponde à descrição acima

tempString = Sheets(1).Cells(lRow, lCol).Text                   ' Get the data from cell.
tempString = Replace(tempString, Chr(34), Chr(34) & Chr(34))    ' If there is double quote, then duplicate it.
CurrTextStr = tempString
pos1 = InStr(tempString, Chr(34))                               ' Get the position of double quote. If not present, it will be 0.
pos2 = InStr(tempString, ";")                                   ' Get the position of semicolon. If not present, it will be 0.
If (pos1 <> 0 Or pos2 <> 0) Then                                ' If there is any double quote or semicolon, then the whole data
    CurrTextStr = Chr(34) & tempString & Chr(34)                '       should be enclosed with double quotes.
End If
oAdoS.WriteText (";" & CurrTextStr)
    
por 26.05.2017 / 12:20
2

Eu tentei isso usando o Excel 2016

Eu abri o Excel - Selecione Arquivo, abra selecionei o arquivo "CSV" e selecionei delimitado, Ponto e Vírgula como o separador e "como o delimitador de texto.

Isso foi importado como esperado e eu poderia editar a célula e excluir o L conforme a pergunta original

Clicar em SALVAR corrompe o arquivo como você encontrou e explicou em outras respostas.

No entanto, selecione SAVE AS e UNICODE selecionado de acordo com um dos comentários - o arquivo foi salvo UTF-8 como um arquivo separado por TAB com "como o delimitador de texto. Você já tentou isso? Isso não é aceitável?

Se eu selecionasse SAVEAS e selecionasse Comma Separado UTF-8, ele era salvo separado por vírgula UTF-8 - não consegui ver um método de reter o ponto-e-vírgula como separador. No entanto, você deve passar pelas opções SAVE AS e verificar se um dos formatos disponíveis em sua versão do Excel é aceitável.

Se for necessário reter o ponto-e-vírgula, você poderá enviar ao arquivo salvo um script de substituição de texto que compreenda aspas (para que, dentro das aspas, não sejam substituídas) Um script VBScript ou Powershell poderia ser escrito para fazer isso alternadamente, uma macro VBA para concatenar todas as células em uma célula com vírgulas separando-as poderia ser usada.

Um comando dependente de uma única linha do Powershell para a conversão final seria (Executar a partir do prompt do CMD)

powershell -command "& import-csv 'CSVUTF.CSV'| export-csv 'PSCSVUTF.CSV' -Encoding 'UTF8' -Delimiter ';' -notype"

Se o seu arquivo não tiver uma linha de cabeçalho com nomes de coluna, será necessário fornecer um parâmetro -header e o arquivo de saída terminará com uma linha de cabeçalho

    
por 27.05.2017 / 02:00
1

Parece que isso foi respondido anos atrás no StackOverflow: link

Basicamente, o Excel salva o CSV usando apenas a codificação ASCII. A solução alternativa é usar o OpenOffice, o Google Docs ou salvar como texto codificado em UTF8. Não tenho certeza de como isso afetará outros processos que você está usando com o arquivo manipulado depois disso.

    
por 22.05.2017 / 19:27