Pare o Excel de converter automaticamente determinados valores de texto em datas


526

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.


120
Sim, como quando um arquivo com 10000 nomes de usuários tem um como "april25", que é convertido em uma data e, eventualmente, é processado como "abr-25", resultando em um erro "nome de usuário não encontrado", porque você não espere que o Excel converta um único valor em uma data, 4000 registros no arquivo, enquanto deixa o texto restante. O código de leitura CSV coxo; realmente, não deveria adivinhar o tipo com base nos primeiros registros X e ficar com ele? Ou deixe todo o texto. Se eu quiser que ele seja formatado como "geral", posso escolher isso mais tarde. Ao assumir "geral" desde o início, corre o risco de corrupção de dados de texto.
precisa saber é o seguinte

Eu tive o problema ao copiar e colar. Para todas as pesquisas na solução, selecione a coluna de destino, defina-a como um formato de sequência / texto, copie a fonte e faça uma pasta especial (clique com o botão direito do mouse) com 'somente valores'. Preserva valores, sem formatação de data.
Kai Noack

84
Eu só quero acrescentar que considero esse comportamento do Excel uma falha grave. E todas as pessoas que não têm o luxo de alterar o conteúdo do arquivo csv antes de importar para o Excel? Ou o que acontece com as pessoas que não percebem esse problema até depois de fazer muitas outras alterações no arquivo CSV? Isso torna o trabalho com arquivos CSV no Excel uma bagunça.
robguinness

Você está usando DatatableJS? Porque eu já sei como fazer isso com essa API. Se você precisa deste encontram-lo aqui: stackoverflow.com/a/36142043/4241058
Richard Rebeco

11
Todas essas soluções para usar Arquivo -> Abrir -> Importar funcionam bem para nós, porque sabemos o que estamos fazendo, mas são inúteis para os outros 99,5% do mundo que não entendem como navegar no sistema de arquivos de / dentro / de um sistema. inscrição. Eles vêem um arquivo e, para usá-lo, clicam duas vezes nele. Passei 25 anos ensinando as pessoas a usar aplicativos de escritório e escrevendo código que gera dados para esses aplicativos de escritório, e usar o / application / para procurar o arquivo a ser usado está completamente além de quase todo mundo.
user2624417

Respostas:


355

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


12
Estou aceitando esta resposta porque 1) meu arquivo csv será usado apenas pelo Excel e 2) isso é para contabilidade e não pode ter um 'no início e 3) não quero que eles tenham que fazer uma importação. Eu só quero que eles abram o csv.

5
Ótimo! Mas por causa do bug Excel 2007 usar a solução proposta por Andrew : "=""2008-10-03""". Atualizado a postagem.
TMS

1
Isso não funciona para mim no Excel 2010 se o texto for muito longo :(
steve

7
A razão pela qual isso funciona é porque, quando o Excel vê o caractere "=", ele decide avaliar a expressão a seguir. Nesse caso, a expressão é simplesmente uma literal de sequência e o valor de uma literal de sequência é o conteúdo da sequência. Assim, as aspas desaparecem magicamente. Você pode colocar = 1 + 2 + 3 e obter o valor 6 após a importação de CSV. A fórmula em si não é destruída no processo de importação.
Lokori

4
Há um grande problema com essa abordagem - se você abrir o arquivo no Excel e editar, salvar e abrir novamente todos esses "desaparecem"
ACV

150

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? .


6
Eu consegui zeros iniciais corretos depois de adicionar \tao meu caractere de separação ;... maldito MS Office, por que isso levou mais de 2 minutos para descobrir?
Morten Jensen

2
Adicionar \ t no final de todos os valores é realmente o truque. É uma solução alternativa, mas na prática funciona bem. Prefiro isso ao truque de fórmula com o igual '=', porque pode ser difícil trabalhar com o primeiro em outras ferramentas.
Ocroquette

3
Não há votos suficientes que possam expressar minha gratidão por você. Pesquise e substitua no bloco de notas ++ ',' to '\ t, \ t' (para acomodar também a primeira e a última colunas) funciona como um encanto. Obrigado.
Asaf

1
Na minha consulta MySQL (para saída CSV através do PHP), usei CONCAT ('\ t' column_name). Também fez o truque. Obrigado!
Just Plain alta

1
Boa ideia. Infelizmente, o Numbers é um pouco "mais inteligente" do que o Excel e não cai no truque das guias. A melhor alternativa que posso encontrar é uma das principais ', já que é bem compreendida e não é muito perturbadora ... mas um invisível seria melhor.
quer

101

Trabalhando com a solução de Jarod e com o problema levantado por Jeffiekins, você pode modificar

"May 16, 2011"

para

"=""May 16, 2011"""

6
Não funciona no Excel 2010 se o texto for maior que um determinado comprimento.
steve

1
@ Andrew, Esta "correção" causará problemas se você precisar ter "valores em qualquer lugar entre a data.
Pacerier

8
Para sua informação, se você salvar o arquivo do Excel, o = desaparecerá e voltará à estaca
zero

Minha experiência não combina nem steve nem d512. Ele funciona para mim no .csv de entrada no Excel 2013 e, após salvar como .xlsx, não é revertido. Fácil o suficiente para qualquer pessoa testar usando esta linha de dados: "806676", "None", "41", "=" "16 de maio de 2011" "", "100,00", "False"
tbc0

1
@ tbc0 Tente em "806676","None","41","=""05-16-2011""","100.00","False"vez disso e você verá que um salvar e recarregar perde o texto hifenizado.
NetMage 29/01/19

65

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!


2
Ah, a propósito, eu não sou o primeiro a descobrir isso. risingline.com/use-excel-read-csv-without-reformatting.php Essa página da Web também possui as instruções úteis de que você pode clicar com o botão Shift pressionado nas colunas da terceira página do assistente para selecioná-las juntas antes de atribuir a cada um o tipo "Texto".
rainerbit

Isso pode funcionar para valores de data, mas parece não funcionar para coisas que o Excel interpreta como numéricas. Se a sua sequência for composta por todos os números e vírgulas, o formato "Texto" será um formato de número científico.
Michael - Onde está Clay Shirky,

3
isso funcionou perfeitamente para mim e não envolveu nenhuma alteração no meu arquivo, exceto para renomeá-lo como .txt. obrigado.
Kevin

1
Infelizmente, o Excel permite apenas isso nas 6 primeiras colunas. Se você precisar de mais, uma abordagem melhor é copiar o conteúdo do csv, criar e esvaziar o arquivo excel, selecione todas as colunas / linhas e defina o tipo como Texto, depois cole o conteúdo e use Dados | Texto para colunas
nachocab 23/10/19

Esta é a melhor solução e deve ser marcada como a resposta.
Rob

28

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.


Acabei de testar isso no Excel 2007 e funciona corretamente para mim. No entanto, se houver um espaço à esquerda antes das aspas, ele não analisará a vírgula corretamente.
precisa saber é o seguinte

8
Isso não parece ser um bug, de acordo com a RFC 4180. A maneira correta de citar o campo é citar todo o campo e depois aspas internas entre aspas. Então "=" "campo, conteúdo" "" tools.ietf.org/html/rfc4180
Peter Stephens

2
@ PeterStephens, isso não funciona se field, contenttiver "dentro dele. Exemplo"=""field, co""ntent"""
Pacerier 5/05

1
@Pacerier Provavelmente, a cotação incorporada deve ser citada duas vezes, se transformando em """".
ErikE

Posso confirmar que a sugestão de @ ErikE está correta. Para um campo com valor 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""".
Tao

22

Ao criar a string a ser gravada no meu arquivo CSV em C #, tive que formatá-la desta maneira:

"=\"" + myVariable + "\""

2
isso despertou para mim no Rails também. Obrigado #
Vieenay Siingh

3
Funciona também em Java
Shoyo

Trabalhou para mim em JavaScript usando o Papa Parse.
wobsoriano 26/07/19

17

2018

A única solução adequada que funcionou para mim (e também sem modificar o CSV ).

Excel 2010:

  1. Criar nova pasta de trabalho
  2. Dados> Do texto> Selecione seu arquivo CSV
  3. No pop-up, escolha o botão de opção "Delimitado" e clique em "Avançar>"
  4. Caixas de seleção delimitadores: marque apenas "Vírgula" e desmarque as outras opções e clique em "Avançar>"
  5. Na "Visualização de dados", role para a extrema direita, mantenha pressionada a tecla Shift e clique na última coluna (isso selecionará todas as colunas). Agora, no "Formato dos dados da coluna", selecione o botão de opção "Texto" e clique em "Concluir".

Excel office365: (versão do cliente)

  1. Criar nova pasta de trabalho
  2. Dados> Do Texto / CSV> Selecione seu arquivo CSV
  3. Detecção de tipo de dados> não detecta

Nota: Excel office365 (versão web), enquanto escrevo isso, você não poderá fazer isso.


3
Isso funciona sem alterar os arquivos CSV de antemão, então acho que essa deve ser a resposta correta.
Jack

Parece a resposta correta. Eu tinha grandes esperanças. Mas no MacOS (office365), não consigo selecionar TODAS as colunas: não há rolagem horizontal na janela de visualização mostrada no assistente de importação de texto, de modo que só posso selecionar as colunas visíveis. Tentei atalhos (CMD + A ou outras coisas), sem sucesso. A opção "não detectar" também não existe. Estou devastado.
Normanius

Excel office 365, selecione Arquivo, Opções, Dados. Existem caixas de seleção para mostrar os assistentes de importação de dados herdados, se necessário.
Kurt Schultz

15

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.


1
Encontrei o mesmo problema, mas seguir as instruções de @ Rob com cuidado funcionaria perfeitamente !. Obrigado
Milacay

2
Infelizmente, o assistente Data From Text não suporta células com várias linhas. Se um texto com várias linhas for encontrado, ele escreverá todas as linhas após a primeira em novas linhas, interrompendo toda a importação. Ele só interpreta as quebras de linha corretamente se você abrir o arquivo CSV clicando duas vezes. Droga, Microsoft ...
CodeManX

1
Infelizmente, isso não resolve o problema da formatação aleatória do Excel "ajuda" - o texto DEC1 ainda é alterado para a data dez-01. O mesmo ocorre com o texto AAAA-MM-DD sendo alternado para DD / MM / AAAA. :(
Baracus

12

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:

  1. Abra o arquivo CSV como texto (bloco de notas)
  2. Copie-o (ctrl + a, ctrl + c).
  3. Cole-o em uma nova planilha do Excel - todos serão colados em uma coluna como longas seqüências de texto.
  4. Escolha / selecione esta coluna.
  5. Vá para Dados - "Texto para colunas ...", na janela aberta escolha "delimitado" (próximo). Verifique se "vírgula" está marcada (a marcação já mostrará a separação dos dados nas colunas abaixo) (próxima); nesta janela, você pode escolher a coluna desejada e marcá-la como texto (em vez de geral) (Concluir).

HTH


O esforço manual também foi desagradável para mim. No entanto, depois de esgotar todas as possibilidades disponíveis, essa foi a mais robusta e confiável.
Ana Maria Mendes-Pereira

No entanto, processamento em lote.
Ana Maria Mendes-Pereira

Esta é realmente a melhor resposta aqui que requer a menor quantidade de trabalho. Eu gostaria que você pudesse definir alguma opção para forçá-lo a não analisar o arquivo.
rola

Você também pode substituir todas as vírgulas por guias, para que sejam delimitadas automaticamente
rola

10

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.


Isso funcionou para mim. Eu tinha alguns valores como 1-1-1 que são convertidos automaticamente em datas. Como mencionado, o espaço será transferido para que o valor seja alterado, mas eu faço uma tira ao analisá-lo, o que não é grande coisa.
jacklin

O espaço não funciona mais para impedir a interpretação de datas ou a remoção de zeros à esquerda. Mas você pode usar um espaço sem quebra "\xA0"- que funcionará.
Doin

8

(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".


8
Essa é uma excelente opção se eu forçar o usuário a usar o processo de importação.

Isso realmente não ajuda o problema, como números na coluna de texto será convertido em números quando exportar para .csv de qualquer maneira ...
Chonez

8

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.


Isso funcionou bem para mim em 03/03/2015, trabalhando com o Excel para Mac 2011 (versão 14.4.8 150116), trabalhando com os dados da pergunta SO awk- evite a reformatação de valores semelhantes a datas , onde o problema está no Excel que awk, apesar do título da pergunta.
Jonathan Leffler

4

(EXCEL 2007 e posterior)

Como forçar o Excel a não "detectar" os formatos de data sem editar o arquivo de origem

Ou:

  • renomeie o arquivo como .txt
  • Se você não conseguir fazer isso, em vez de abrir o arquivo CSV diretamente no Excel, crie uma nova pasta de trabalho e acesse
    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".


4

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:

012345,00198475

Eles devem ser alterados antes da abertura no Excel para:

"="""012345","="""00198475"

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:

="012345"

Outra abordagem é armazenar o número no csv como 1234500198475E-8; dessa forma, outros cálculos no Excel ainda serão possíveis.
18719

4

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.


Se um espaço extra à esquerda dos seus dados não interessar, será possível corrigir os problemas do Excel anexando-os "\xA0"(sem espaço de quebra) aos dados.
Doin

3

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 .


2

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.


2

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.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing

2

Sem modificar o seu arquivo csv, você pode:

  1. Altere a opção Formatar células do Excel para "texto"
  2. Em seguida, use o "Assistente para importação de texto" para definir as células csv.
  3. Uma vez importados, exclua esses dados
  4. depois cole como texto simples

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.


1

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

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

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.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

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.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

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.


muito complicado
rola

1

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 ().


Não sei por que sua resposta foi negada. É útil para pelo menos as pessoas que estão usando R. Esta resposta me ajudou. Obrigado :)
sriharsha KB 22/09

1

Uma solução alternativa usando o Google Drive (ou Numbers, se você estiver em um Mac):

  1. Abra os dados no Excel
  2. Defina o formato da coluna com dados incorretos como Texto (Formato> Células> Número> Texto)
  3. Carregue o .csv no Google Drive e abra-o com o Planilhas Google
  4. Copie a coluna incorreta
  5. Cole a coluna no Excel como Texto (Editar> Colar Especial> Texto)

Como alternativa, se você estiver em um Mac para a etapa 3, poderá abrir os dados no Numbers.


Esta é uma solução sã, em vez de trabalhar nela por horas sem qualquer resolução.
imsrgadich

1

(EXCEL 2016 e posterior, na verdade eu não tentei em versões mais antigas)

  1. Abrir nova página em branco
  2. Vá para a aba "Dados"
  3. Clique em "From Text / CSV" e escolha seu arquivo csv
  4. Verifique na pré-visualização se seus dados estão corretos.
  5. Caso uma coluna seja convertida em data, clique em "editar" e selecione o tipo Texto clicando no calendário no cabeçalho da coluna
  6. Clique em "Fechar e carregar"

0

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.


0

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.


0

SOLUÇÃO MAIS FÁCIL Acabei de descobrir isso hoje.

  • Abrir no Word
  • Substitua todos os hífens por traços
  • Salvar e fechar
  • Abrir no Excel

Quando terminar de editar, você sempre poderá abri-lo novamente no Word para substituir os traços por hífens novamente.


0

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.


Se você se incomodar em ler algumas das outras respostas, verá que alguém já sugeriu isso aqui .
Laurel

Eu me incomodei, obrigado. Sugiro que a seleção de formatação automática seja uma nova parte do processo de importação. Minha resposta fornece um fluxo de trabalho muito específico, para aqueles que, como eu, foram forçados a usar o Planilhas para lidar com esse problema específico. Na minha opinião, isso merecia uma resposta separada. Um pequeno ajuste no seu tom pode realmente resultar na interpretação do seu comentário como útil, que é o objetivo de toda essa família de sites.
Brendonwbrown 16/08

Mas você pode simplesmente usar a Importação de texto no Excel para importar o arquivo CSV e não se preocupar com o Planilhas, conforme observado em outras respostas.
NetMage 29/01/19

0

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.

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup

Columns(ActiveCell.Column).NumberFormat = "@"

Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

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.


-1

Se você colocar uma vírgula invertida no início do campo, ela será interpretada como texto.

Exemplo: 25/12/2008torna - se'25/12/2008

Você também pode selecionar o tipo de campo ao importar.


9
Não quero um 'no início dos meus dados.

27
-1. O 'só funciona quando inserido diretamente no Excel, mas não funciona em CSV - você teria um caractere extra' na célula do Excel após a importação.
TMS

-1

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.

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.