Formatando um CSV delimitado por vírgula para forçar o Excel a interpretar valor como uma string

50

Estou procurando há algum tempo tentando descobrir como gerar um arquivo CSV de maneira a forçar o Excel a interpretar os valores como uma string e não tentar convertê-los em números ou datas.

por exemplo:

"141", "10/11/2002", "350.00", "1311742251"

O Excel tenta converter "inteligentemente" todos esses formatos de data / número nativos. Existe uma maneira de contornar isso?

EDIT: Esclarecido a intenção da minha pergunta, desculpe pela confusão.

    
por Simon East 03.08.2011 / 10:39

5 respostas

50

Para aqueles que têm controle sobre os dados de origem, aparentemente o Excel detectará automaticamente o formato de um campo CSV, a menos que a coluna CSV esteja neste formato:

"=""Data Here"""

por exemplo ...

20,       5.5%,      "0404 123 351", "3-6",  "=""123"""
[number]  [percent]  [number]        [date]  [string]  <-- how Excel interprets

Ele também funciona na planilha do Google, mas não tem certeza se outros aplicativos de planilhas suportam essa notação.

Se você suspeitar que os dados podem conter citações, você precisará duplicá-los , assim ...

"=""She said """"Hello"""" to him"""



(EDIT: Atualizado com correções, obrigado DMA57361!)

    
por 03.08.2011 / 10:39
27

Como muitos, tenho lutado com as mesmas decisões que a Microsoft e tentei várias soluções sugeridas.

Para o Excel 2007, segue-se:

  • Colocar todos os valores entre aspas duplas NÃO ajuda
  • Colocando um = antes de todos os valores depois de colocá-los em duplos quutes ajuda, mas faz o arquivo csv inútil para a maioria das outras aplicações
  • Colocar parênteses entre aspas duplas em torno de todos os valores é lixo
  • Colocando um espaço antes de todos os valores antes de colocar aspas duplas em volta evita conversões para datas, mas NÃO impede o corte de zeros à esquerda ou à direita.
  • Colocar uma cotação única na frente de um valor só funciona ao entrar dados no Excel.

No entanto:

Colocar uma tabulação antes de todos os valores antes de colocar aspas duplas ao redor deles NÃO impede conversões em datas E evita o corte de zeros à esquerda ou à direita e a planilha não mostra marcadores de aviso desagradáveis no canto superior esquerdo de cada célula.

Por exemplo:

"<tab character><some value>","<tab character><some other value>"

Observe que o caractere de tabulação deve estar entre aspas duplas. Edit: Acontece que as aspas duplas não são mesmo necessárias.

Clicar duas vezes no arquivo csv pode abrir o arquivo como uma planilha no Excel mostrando todos os valores tratados como acima, como dados de texto. Certifique-se de definir o Excel para usar o '.' como o ponto decimal e não o ',' ou cada linha do arquivo csv terminará como um texto no primeira célula de cada linha. Aparentemente, a Microsoft acha que CSV significa "Não é o valor separado do ponto decimal".

    
por 20.01.2014 / 14:02
19

Usar a funcionalidade de importação do Excel permite que você especifique o formato (automático, texto ou data) em que cada coluna deve ser interpretada e não requer nenhuma modificação nos arquivos de dados.

Você pode encontrá-lo como DataGet External DataFrom Text no Excel 2007/2010.
 Ou DataImport External DataImport Data no Excel 2003.

Veja uma imagem do Assistente de Importação de Texto do Excel 2003 em ação nos dados de exemplo fornecidos, mostrando-me a importação das duas últimas colunas como texto:

    
por 03.08.2011 / 11:13
1

O exemplo de Simon não funcionou para mim e suspeito que seja uma diferença de idioma. Em C #, aqui está a aparência da minha string de formato de trabalho:

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);

e é assim que o arquivo de saída se parece:

="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,=""

Como pode ser visto, o formato no arquivo de saída é ="VALUE", não "=""VALUE""", , que acredito ser uma convenção do Visual Basic.

Estou usando o Excel 2010. Por acaso, o Planilhas Google não abre / converte um arquivo formatado dessa maneira. Ele funcionará se você remover o sinal de igual "VALUE", - o Excel ainda abrirá o arquivo, mas ignorará o fato de você querer que suas colunas sejam strings.

    
por 13.01.2013 / 23:37
-2

Uma maneira simples de forçar o Excel a interpretar a data como texto é colocar uma única citação antes da data, em vez de usar aspas completas, como em:

'10/11/2002

Se você puder importar o CSV em vez de abri-lo, poderá informar ao Excel o formato de cada coluna. Dê uma olhada em essa pergunta eu perguntei .

    
por 14.01.2013 / 00:23