Sei que essa é uma pergunta antiga, mas o problema não vai desaparecer em breve. Os arquivos CSV são fáceis de gerar a partir da maioria das linguagens de programação, bastante pequenos, legíveis por humanos, com um editor de texto simples e onipresentes.
O problema não é apenas com datas nos campos de texto, mas qualquer coisa numérica também é convertida de texto em números. Alguns exemplos em que isso é problemático:
- CEP / códigos postais
- números de telefone
- números de identificação do governo
que às vezes pode começar com um ou mais zeros (0), que são jogados fora quando convertidos em numéricos. Ou o valor contém caracteres que podem ser confundidos com operadores matemáticos (como em datas: /, -).
Dois casos em que posso pensar que a solução "prepending =", como mencionado anteriormente, talvez não seja o ideal é
- onde o arquivo pode ser importado para um programa diferente do MS Excel (a função Mala direta do MS Word vem à mente),
- onde a legibilidade humana pode ser importante.
Meu truque para contornar isso
Se alguém adicionar / adicionar um caractere não numérico e / ou não de data no valor, o valor será reconhecido como texto e não convertido. Um caractere não imprimível seria bom, pois não altera o valor exibido. No entanto, o caractere de espaço antigo simples (\ s, ASCII 32) não funciona para isso, pois é cortado pelo Excel e, em seguida, o valor ainda é convertido. Mas existem vários outros caracteres de espaço de impressão e não impressão que funcionarão bem. O mais fácil, porém, é acrescentar (adicionar depois) o caractere de tabulação simples (\ t, ASCII 9).
Benefícios desta abordagem:
- Disponível no teclado ou com um código ASCII fácil de lembrar (9),
- Não incomoda a importação,
- Normalmente não incomoda os resultados da mala direta (dependendo do layout do modelo - mas normalmente apenas adiciona um espaço amplo no final de uma linha). (Se isso for um problema, observe outros caracteres, por exemplo, o espaço de largura zero (ZWSP, Unicode U + 200B)
- não é um grande obstáculo ao visualizar o CSV no bloco de notas (etc),
- e pode ser removido por localizar / substituir no Excel (ou no Bloco de notas, etc.).
- Você não precisa importar o CSV, mas pode simplesmente clicar duas vezes para abrir o CSV no Excel.
Se houver um motivo para você não querer usar a guia, procure em outra tabela Unicode algo mais adequado.
Outra opção
pode ser para gerar arquivos XML, para os quais um determinado formato também é aceito para importação pelas versões mais recentes do MS Excel e que permite muito mais opções semelhantes ao formato .XLS, mas não tenho experiência com isso.
Portanto, existem várias opções. Dependendo dos seus requisitos / aplicativo, um pode ser melhor que o outro.
Adição
É preciso dizer que as versões mais recentes (2013+) do MS Excel não abrem mais o CSV no formato de planilha - mais um aumento de velocidade no fluxo de trabalho tornando o Excel menos útil ... Pelo menos, existem instruções para contornar isso. Veja, por exemplo, este Stackoverflow: como exibir corretamente arquivos .csv no Excel 2013?
.