Importação de CSV do Excel tratando cadeias de números entre aspas como valores numéricos, não cadeias


13

Eu tenho um aplicativo da web que está exportando seus dados para um arquivo CSV. Aqui está um exemplo de linha do arquivo CSV em questão:

28,"65154",02/21/2013 00:00,"false","0316295","8316012,8315844","MALE"

Como não consigo postar uma imagem, terei que explicar os resultados no Excel. O campo "0316295" é transformado em número e o 0 inicial desaparece. O "8316012,8315844" é interpretado como um único número: 83,160,128,315,844. Obviamente, esse não é o resultado pretendido.

Vi pessoas recomendando uma citação única para esses casos, mas isso também não funciona.

28,"65154",02/21/2013 00:00,"false","'0316295","'8316012,8315844","MALE"

A citação única é visível o tempo todo na célula no Excel, embora, se eu mesmo inserir um número com uma citação simples à esquerda, ele mostrará apenas a sequência pretendida e não a aspas simples com a sequência.

Importar não é o mesmo que digitar, ao que parece.

Alguém tem uma solução aqui?


Você pode importá-lo usando o LibreOffice ou algo do gênero? Acabei de importados e tenho: 28 65154 2013/02/21 00:00 falsa 0.316.295 8316012,8315844 masculino (se você pode ler que ...?)
ato falho

Esta questão é semelhante e oferece algumas boas soluções: superuser.com/questions/234997/...
Brad Patton

@FreudianSlip Não, não podemos usar uma solução de terceiros. Os usuários clicam no botão "baixar CSV" e o arquivo é aberto no Excel. É com esse ambiente que estamos lidando. Não posso realmente complicar isso.
Michael Oryl

@ Brad Li esse post anteriormente procurando soluções. Foi daí que obtive a opção de aspas simples, da qual realmente não gosto, pois o Excel mostra a cotação na própria célula quando importada do CSV (mesmo que não seja exibida se você digitar a mesma coisa em si mesmo).
Michael Oryl 19/03/2013

você controla pelo menos o aplicativo Web? como você implementará a solução de forma transparente com os usuários? Eu atualizei a minha resposta para que ele iria lidar correctamente com valores com vírgulas
Alex P.

Respostas:


10

Isso deve funcionar

28,"65154",02/21/2013 00:00,"false",="0316295","=""8316012,8315844""","MALE"

Não, isso controla o valor com dois números. Recebemos = "1234567 sem cotação de fechamento trabalho não para os números mais simples, no entanto..
Michael Oryl

1
se você controlar o aplicativo Web, poderá implementar a exportação para o formato SYLK pt.wikipedia.org/wiki/SYmbolic_LinK_(SYLK) . possui um controle muito melhor da representação de dados. se não - você poderia facilmente fazer um script conversor
Alex P.

2
atualizei a resposta para que ele iria lidar correctamente com valores com vírgulas
Alex P.

Isso lidou com os valores separados por vírgula corretamente. Obrigado.
Michael Oryl 20/03

obrigado. Esta solução resolveu um problema ao importar números hexidecimais também. O Excel substitui 00E3por 0 (0 * 10 ^ 3) e o exibe como notação científica (0,00E + 00). Na verdade, faz o mesmo para "00e3"sem o =. Mas ="00e3"funciona perfeitamente. (abrindo um CSV com Excel 2010)
mpag

12

Para manter o (s) zero (s) inicial (is), você pode definir o formato dessa coluna específica como Texto no Assistente de Importação de Texto.

  1. Inicie o Assistente para importação de texto , indo para a guia Dados e clicando em Do texto .
  2. Selecione o arquivo CSV que você deseja importar.
  3. Escolha Delimitado e clique em Avançar .
  4. Desmarque a guia (padrão). Escolha vírgula . Verifique se o Qualificador de texto está definido como ". Clique em Avançar .
  5. É aqui que você pode especificar os formatos . Clique no cabeçalho da coluna cujos zero iniciais você deseja preservar. Selecione o texto . (Veja a imagem abaixo)

    insira a descrição da imagem aqui

  6. Clique em Concluir e selecione um local adequado para seus dados. Resultado da amostra:

    insira a descrição da imagem aqui

Edit : Existe outra maneira ; exporte o aplicativo Web para um arquivo .TXT delimitado por vírgula, em vez de .CSV (ou apenas altere a extensão do arquivo exportado após salvá-lo). Isso força o Excel a passar pelo assistente de importação quando eles abrem o arquivo. Como uma vantagem adicional, reduz as chances de os usuários modificarem ou violarem seus dados brutos originais.


1
Sim, isso certamente é verdade. Simplesmente não é realmente conveniente para o usuário final quando, em comparação, tudo o que eles precisam fazer é clicar no link do gerador de CSV em nosso aplicativo Web e o Excel o carrega automaticamente - embora com os problemas acima mencionados. Os arquivos CSV estão definidos para abrir no Excel e o Excel não oferece nenhuma opção no momento. Apenas os carrega. Eu agradeço por você apontar isso, no entanto.
Michael Oryl

1
Existe outra maneira, mas não sei se é possível no seu caso: exporte o aplicativo Web para delimitado por vírgulas em .TXTvez de .CSV(ou apenas altere a extensão do arquivo exportado). Esse tipo de "força" os usuários a passar pelo assistente de importação quando abrem o arquivo.
Ellesa

Esse é um ponto muito bom. Obrigado por apontar isso. Pode ser útil no futuro.
Michael Oryl

4

O Excel trata valores numéricos começando com um caractere de tabulação como texto.

<tabchar>000000100000200000,ABC,DEF

Aparecerá como:

000000100000200000|ABC|DEF

| é o limite da célula (para fins ilustrativos). Portanto, por exemplo, se o seu sistema gerar o arquivo CSV usando o utf-8 charset, você poderá adicionar o &#x0009;(Tab Char em Hex) antes do seu valor numérico para forçar o Excel a interpretá-lo como texto.


Remova o espaço antes de ponto e vírgula na representação hexadecimal. Não sei como escapar do caractere Hex Tab na resposta, então eu o digitei deliberadamente errado.
precisa saber é o seguinte

1
Eu fiz a fuga. E eu aprendi algo novo, obrigado. Tenho de acrescentar que isso o meu tema favorito para o trabalho :)
nixda

3

O Excel detectará automaticamente o formato de um campo CSV, a menos que a coluna CSV esteja neste formato:

"=""Data Here"""

Isso também funciona para folhas do Google


0

Você precisaria usar a funcionalidade "Dados -> Obter dados externos -> Importar texto do arquivo" no Excel para exibi-la como texto. Este é o assistente de importação de texto @Kaze mencionado.

A única maneira de forçar o Excel a exibir números como texto da entrada, sem que o usuário precise fazer nada, é produzir um arquivo do Excel e especificar um "formato de número personalizado" nele. Eu recomendo usar uma biblioteca de exportação XLS para isso, pois não parece tão simples quanto adicionar uma linha de texto de configuração em um arquivo CSV.


0

tente a função clean para valores que estão bagunçados. Por exemplo = limpo ("12345678901234567890"). Funciona para mim em números, datas, horas etc. Eu advertiria que, como esse não é o objetivo desta função, isso pode parar de funcionar com novas versões etc.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.