Alguém sabe se existe um token que posso adicionar ao meu csv para um determinado campo para que o Excel não tente convertê-lo em uma data?
Estou tentando escrever um arquivo .csv do meu aplicativo e um dos valores parece bastante com uma data em que o Excel o converte automaticamente de texto para uma data. Tentei colocar todos os meus campos de texto (incluindo o que parece uma data) entre aspas duplas, mas isso não tem efeito.
Respostas:
Eu descobri que colocar um '=' antes das aspas duplas realizará o que você deseja. Força os dados a serem texto.
por exemplo. = "03-10-2008", = "mais texto"
EDIT (de acordo com outras postagens) : por causa do bug do Excel 2007 observado por Jeffiekins, deve-se usar a solução proposta por Andrew :
"=""2008-10-03"""
fonte
"=""2008-10-03"""
. Atualizado a postagem.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:
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 é
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:
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? .
fonte
\t
ao meu caractere de separação;
... maldito MS Office, por que isso levou mais de 2 minutos para descobrir?column_name
). Também fez o truque. Obrigado!'
, já que é bem compreendida e não é muito perturbadora ... mas um invisível seria melhor.Trabalhando com a solução de Jarod e com o problema levantado por Jeffiekins, você pode modificar
para
fonte
"
valores em qualquer lugar entre a data."806676","None","41","=""05-16-2011""","100.00","False"
vez disso e você verá que um salvar e recarregar perde o texto hifenizado.Eu tive um problema semelhante e esta é a solução alternativa que me ajudou sem ter que editar o conteúdo do arquivo csv:
Se você tiver a flexibilidade de nomear o arquivo como algo diferente de ".csv", poderá nomeá-lo com uma extensão ".txt", como "Myfile.txt" ou "Myfile.csv.txt". Então, quando você o abrir no Excel (não por arrastar e soltar, mas usando Arquivo-> Abrir ou a lista de arquivos usados mais recentemente), o Excel fornecerá um "Assistente para importação de texto".
Na primeira página do assistente, escolha "Delimitado" para o tipo de arquivo.
Na segunda página do assistente, escolha "," como o delimitador e também escolha o qualificador de texto se você tiver cercado seus valores entre aspas
Na terceira página, selecione cada coluna individualmente e atribua a cada um o tipo "Texto" em vez de "Geral" para impedir que o Excel mexa com seus dados.
Espero que isso ajude você ou alguém com um problema semelhante!
fonte
AVISO: O Excel '07 (pelo menos) tem um erro (outro): se houver uma vírgula no conteúdo de um campo, ele não analisa corretamente o = "campo, conteúdo", mas coloca tudo depois da vírgula no campo campo a seguir, independentemente das aspas.
A única solução alternativa que descobri que funciona é eliminar o = quando o conteúdo do campo incluir uma vírgula.
Isso pode significar que existem alguns campos impossíveis de representar exatamente "corretos" no Excel, mas agora eu confio que ninguém está surpreso demais.
fonte
field, content
tiver"
dentro dele. Exemplo"=""field, co""ntent"""
""""
.1"2
, se você optar por usar esse truque (em vez de apenas deixá-lo como"1""2"
no arquivo - o Excel já teria tratado é como texto), a sequência correta final no arquivo CSV de destino do Excel terminará sendo"=""1""""2"""
.Ao criar a string a ser gravada no meu arquivo CSV em C #, tive que formatá-la desta maneira:
fonte
2018
A única solução adequada que funcionou para mim (e também sem modificar o CSV ).
Excel 2010:
Excel office365: (versão do cliente)
Nota: Excel office365 (versão web), enquanto escrevo isso, você não poderá fazer isso.
fonte
No Excel 2010, abra uma nova planilha. Na faixa de dados, clique em "Obter dados externos do texto". Selecione seu arquivo CSV e clique em "Abrir". Clique em "Next". Desmarque "Tab", coloque uma marca de seleção ao lado de "Vírgula" e clique em "Avançar". Clique em qualquer lugar na primeira coluna. Enquanto mantém pressionada a tecla Shift, arraste o controle deslizante até você poder clicar na última coluna e solte a tecla Shift. Clique no botão de opção "texto" e clique em "Concluir"
Todas as colunas serão importadas como texto, exatamente como estavam no arquivo CSV.
fonte
Ainda é um problema no lançamento do Microsoft Office 2016, bastante perturbador para aqueles que trabalham com nomes de genes como MARC1, MARCH1, SEPT1 etc. A solução que achei mais prática depois de gerar um arquivo ".csv" em R, que será aberto / compartilhado com os usuários do Excel:
HTH
fonte
Aqui está o método simples que usamos no trabalho aqui ao gerar o arquivo csv em primeiro lugar, ele altera os valores um pouco, de modo que não é adequado em todas as aplicações:
Anexar um espaço a todos os valores no csv
Esse espaço será removido pelo Excel de números como "1", "2.3" e "-2.9e4", mas permanecerá em datas como "01/10/1993" e booleanos como "TRUE", impedindo que eles sejam convertidos em tipos de dados internos do excel.
Ele também impede que aspas duplas sejam zapeadas na leitura, portanto, uma maneira infalível de tornar o texto em um csv permanece inalterada pelo excel. ou seja (usando aspas simples para mostrar o que você digitaria) '"3,1415"'. Então, no Excel, você sempre tem a string original, exceto que é cercada por aspas duplas e precedida por um espaço; portanto, é necessário considerar as que estão em qualquer fórmula etc.
fonte
"\xA0"
- que funcionará.(Supondo que o Excel 2003 ...)
Ao usar o Assistente de texto em colunas, na Etapa 3 você pode ditar o tipo de dados para cada uma das colunas. Clique na coluna na visualização e altere a coluna de mau comportamento de "Geral" para "Texto".
fonte
Essa é a única maneira de saber como fazer isso sem mexer no próprio arquivo. Como sempre no Excel, aprendi isso batendo minha cabeça na mesa por horas.
Altere a extensão do arquivo .csv para .txt; isso impedirá o Excel de converter automaticamente o arquivo quando ele é aberto. Eis como faço: abra o Excel em uma planilha em branco, feche a planilha em branco e, em seguida, Arquivo => Abrir e escolha seu arquivo com a extensão .txt. Isso força o Excel a abrir o "Assistente para importação de texto", onde ele fará perguntas sobre como você deseja que ele interprete o arquivo. Primeiro, você escolhe seu delimitador (vírgula, tabulação, etc ...); depois (aqui está a parte importante), você escolhe um conjunto de colunas e seleciona a formatação. Se você quiser exatamente o que está no arquivo, escolha "Texto" e o Excel exibirá exatamente o que há entre os delimitadores.
fonte
awk
- evite a reformatação de valores semelhantes a datas , onde o problema está no Excel queawk
, apesar do título da pergunta.(EXCEL 2007 e posterior)
Como forçar o Excel a não "detectar" os formatos de data sem editar o arquivo de origem
Ou:
Data > Get external data > From Text
seu CSV.
De qualquer forma, você verá opções de importação, basta selecionar cada coluna que contém as datas e informar ao Excel para formatar como "texto" e não "geral".
fonte
O que fiz para esse mesmo problema foi adicionar o seguinte antes de cada valor csv: "=" "" e uma citação dupla após cada valor CSV, antes de abrir o arquivo no Excel. Pegue os seguintes valores, por exemplo:
Eles devem ser alterados antes da abertura no Excel para:
Depois de fazer isso, cada valor de célula aparece como uma fórmula no Excel e, portanto, não será formatado como um número, data etc. Por exemplo, um valor de 012345 aparece como:
fonte
1234500198475E-8
; dessa forma, outros cálculos no Excel ainda serão possíveis.Nenhuma das soluções oferecidas aqui é uma boa solução. Pode funcionar para casos individuais, mas apenas se você estiver no controle da exibição final. Tomemos o meu exemplo: meu trabalho produz uma lista de produtos que eles vendem para o varejo. Ele está no formato CSV e contém códigos de peça, alguns deles começam com zeros, definidos pelos fabricantes (não sob nosso controle). Tire os zeros à esquerda e você poderá realmente corresponder a outro produto. Os clientes de varejo desejam a lista no formato CSV por causa dos programas de processamento de back-end, que também estão fora de nosso controle e são diferentes por cliente; portanto, não podemos alterar o formato dos arquivos CSV. Nenhum prefixo '=', nem guias adicionadas. Os dados nos arquivos CSV brutos estão corretos; é quando os clientes abrem esses arquivos no Excel que os problemas começam. E muitos clientes não são realmente conhecedores de computadores. Eles podem abrir e salvar um anexo de email. Estamos pensando em fornecer os dados em dois formatos ligeiramente diferentes: um como amigável ao Excel (usando as opções sugeridas acima adicionando uma TAB, a outra como o 'mestre'. Mas isso pode ser uma ilusão, pois alguns clientes não entendem o porquê Enquanto isso, continuamos explicando por que eles às vezes veem dados 'errados' em suas planilhas. Até que a Microsoft faça uma alteração adequada, não vejo uma solução adequada para isso, desde que não se tenha controle sobre como os usuários finais use os arquivos Mas isso pode ser uma ilusão, pois alguns clientes não entenderão por que precisamos fazer isso. Enquanto isso, continuamos explicando por que eles às vezes veem dados 'errados' em suas planilhas. Até que a Microsoft faça uma alteração adequada, não vejo uma solução adequada para isso, desde que não se tenha controle sobre como os usuários finais usam os arquivos. Mas isso pode ser uma ilusão, pois alguns clientes não entenderão por que precisamos fazer isso. Enquanto isso, continuamos explicando por que eles às vezes veem dados 'errados' em suas planilhas. Até que a Microsoft faça uma alteração adequada, não vejo uma solução adequada para isso, desde que não se tenha controle sobre como os usuários finais usam os arquivos.
fonte
"\xA0"
(sem espaço de quebra) aos dados.Esta semana, acabei de me deparar com esta convenção, que parece ser uma abordagem excelente, mas não a encontro em nenhum lugar. Alguém está familiarizado com isso? Você pode citar uma fonte para isso? Não procurei por horas e horas, mas espero que alguém reconheça essa abordagem.
Exemplo 1: = ("012345678905") é exibido como 012345678905
Exemplo 2: = ("1954-12-12") é exibido como 1954-12-12 , não 12/12/1954 .
fonte
Não é o Excel. O Windows reconhece a fórmula, os dados como uma data e as autocorreções. Você precisa alterar as configurações do Windows.
"Painel de controle" (-> "Alternar para o modo de exibição clássico") -> "Opções regionais e de idioma" -> guia "Opções regionais" -> "Personalizar ..." -> guia "Números" -> E altere os símbolos de acordo com o que você quer.
http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html
Ele funcionará no seu computador; se essas configurações não forem alteradas, por exemplo, no computador de seus clientes, elas verão datas em vez de dados.
fonte
Olá, tenho o mesmo problema,
Escrevo este vbscipt para criar outro arquivo CSV. O novo arquivo CSV terá um espaço na fonte de cada campo, portanto, o Excel o entenderá como texto.
Para criar um arquivo .vbs com o código abaixo (por exemplo, Modify_CSV.vbs), salve e feche-o. Arraste e solte seu arquivo original no seu arquivo vbscript. Ele criará um novo arquivo com "SPACE_ADDED" para o nome do arquivo no mesmo local.
fonte
Sem modificar o seu arquivo csv, você pode:
O excel formatará e separará adequadamente as células csv como texto formatado, ignorando os formatos automáticos de data.
Uma espécie de solução boba, mas é melhor do que modificar os dados csv antes de importar. Andy Baird e Richard meio que escaparam desse método, mas perderam alguns passos importantes.
fonte
Eu sei que este é um tópico antigo. Para aqueles como eu, quem ainda tem esse problema usando o office 2013 via powershell com objeto pode usar o método opentext . O problema é que esse método possui muitos argumentos, que às vezes são mútuos exclusivos. Para resolver esse problema, você pode usar o método invoke-namedparameter apresentado nesta postagem . Um exemplo seria
Infelizmente, acabei de descobrir que esse método interrompe a análise csv quando as células contêm quebras de linha. Isso é suportado pelo csv, mas a implementação do microsofts parece estar com erros. Também não detectou caracteres específicos alemães. Dar-lhe a cultura correta não mudou esse comportamento. Todos os arquivos (csv e script) são salvos com a codificação utf8. Primeiro, escrevi o código a seguir para inserir a célula csv por célula.
Mas isso é extremamente lento, e é por isso que procurei uma alternativa. Aparentemente, o Excel permite definir os valores de um intervalo de células com uma matriz. Então, eu usei o algoritmo neste blog para transformar o csv em um multiarray.
Você pode usar o código acima, pois deve converter qualquer csvs no excel. Basta alterar o caminho para o csv e o caractere delimitador na parte inferior.
fonte
No meu caso, "Sept8" em um arquivo csv gerado usando R foi convertido em "8-Sept" pelo Excel 2013. O problema foi resolvido usando a função write.xlsx2 () no pacote xlsx para gerar o arquivo de saída no formato xlsx , que pode ser carregado pelo Excel sem conversão indesejada. Portanto, se você receber um arquivo csv, tente carregá-lo no R e convertê-lo no xlsx usando a função write.xlsx2 ().
fonte
Uma solução alternativa usando o Google Drive (ou Numbers, se você estiver em um Mac):
Como alternativa, se você estiver em um Mac para a etapa 3, poderá abrir os dados no Numbers.
fonte
(EXCEL 2016 e posterior, na verdade eu não tentei em versões mais antigas)
fonte
Ok, encontrei uma maneira simples de fazer isso no Excel 2003 a 2007. Abra uma pasta de trabalho xls em branco. Em seguida, vá ao menu Dados, importe dados externos. Selecione seu arquivo csv. Siga o assistente e, em "formato de dados da coluna", selecione qualquer coluna que precise ser forçada a "texto". Isso importará a coluna inteira como um formato de texto, impedindo que o Excel tente tratar células específicas como uma data.
fonte
Esse problema ainda está presente no Mac Office 2011 e no Office 2013, não posso impedir que isso aconteça. Parece uma coisa tão básica.
No meu caso, eu tinha valores como "1 - 2" e "7 - 12" no CSV incluídos corretamente entre vírgulas invertidas. Isso se converte automaticamente em uma data no Excel, se você tentar posteriormente convertê-lo em texto sem formatação. uma representação numérica da data como 43768. Além disso, reformata grandes números encontrados em códigos de barras e números EAN em números 123E + novamente que não podem ser convertidos novamente.
Descobri que o Planilhas Google do Google Drive não converte os números em datas. Os códigos de barras têm vírgulas a cada 3 caracteres, mas são facilmente removidos. Ele lida com CSVs muito bem, especialmente quando se lida com CSVs de MAC / Windows.
Pode salvar alguém em algum momento.
fonte
SOLUÇÃO MAIS FÁCIL Acabei de descobrir isso hoje.
Quando terminar de editar, você sempre poderá abri-lo novamente no Word para substituir os traços por hífens novamente.
fonte
Faço isso para números de cartão de crédito que continuam convertendo em notação científica: acabo importando meu arquivo .csv para o Planilhas Google. As opções de importação agora permitem desativar a formatação automática de valores numéricos. Defino as colunas sensíveis como Texto sem formatação e faço o download como xlsx.
É um fluxo de trabalho terrível, mas pelo menos meus valores são deixados como deveriam.
fonte
Eu fiz essa macro vba que basicamente formata o intervalo de saída como texto antes de colar os números. Funciona perfeito para mim quando eu quero colar valores como 8/11, 23/6, 1/3 etc. sem o Excel interpretá-los como datas.
Estou muito interessado em saber se isso funciona para outras pessoas também. Estou procurando uma solução para esse problema há algum tempo, mas ainda não vi uma solução vba rápida para isso, que não incluía a inserção de 'na frente do texto de entrada. Este código mantém os dados em sua forma original.
fonte
Se você colocar uma vírgula invertida no início do campo, ela será interpretada como texto.
Exemplo:
25/12/2008
torna - se'25/12/2008
Você também pode selecionar o tipo de campo ao importar.
fonte
Um método alternativo:
Converta o formato da coluna que você deseja alterar para 'Texto'. Selecione todas as células que deseja preservar, copie. Sem desmarcar essas colunas, clique em "Editar> Colar especial> Como valores"
Salve como CSV. Observe que essa deve ser a última coisa que você faz no arquivo, porque quando o reabrir, ele se formatará como datas, pois os formatos de célula não podem ser salvos em arquivos CSV.
fonte