Embora tente evitá-lo, ocasionalmente tenho que abrir um arquivo CSV no Excel. Quando o faço, formata colunas contendo números, o que os torna inúteis para meus propósitos. Pelo que sei, a única maneira de impedir que isso aconteça na importação é renomear o arquivo para que a extensão não seja .csv e usar o assistente de importação para especificar o formato de cada coluna individualmente. Para arquivos com 50 a 60 colunas, isso é impraticável.
Como todas as respostas para essa pergunta freqüente na Internet sugerem alguns meios de converter os números formatados novamente quando o arquivo for aberto (o que não funcionará para mim - quero resolver o problema geral, não alguns casos específicos) ou selecionando manualmente o tipo de formato de cada coluna (o que não quero fazer), estou procurando uma maneira de definir uma preferência ou estilo global, de modo que todas as colunas de todos os arquivos CSV abertos sejam sempre formatadas como texto. Também sei como "blindar" os números com aspas, mas os arquivos que recebo não são assim e esperava evitar ter que pré-processar os arquivos para que o Excel não estrague tudo.
Existe uma maneira de fazer isso especificamente : sempre formate todas as colunas nos arquivos CSV abertos como texto, sem selecionar manualmente cada coluna todas as vezes durante a importação?
Estou usando o Excel 2003, mas receberei respostas para 2007 se é isso que você sabe.
fonte
Respostas:
Isso funciona:
Uso:
O arquivo separado por vírgula agora está aberto como planilha do Excel com todas as colunas formatadas como texto.
Observe que a solução do assistente do @ Wetmelon funciona muito bem, mas se você estiver abrindo muitos arquivos, poderá, como eu, se cansar de cada vez, rolando para a coluna 60 para clicar com a tecla Shift pressionada.
EDIT @GSerg afirma no comentário abaixo que isso "não funciona" e "consome espaços e zeros à esquerda". Vou apenas citar o comentário para a pergunta, que é mais descritiva:
Portanto, o código acima "funciona", mas é morto por esse comportamento ridículo do Excel. Qualquer que seja a maneira como você o corta, você está preso tendo que alterar a extensão para algo diferente de ".csv", desculpe! Depois disso, você estará em casa livre.
fonte
Workbooks.OpenText
tem suas falhas por design (veja minha resposta abaixo). Use emQueryTables
vez disso.Como abrir CSVs no Excel
Bom caminho
Excel → Dados → Obter dados externos → Selecione todas as colunas com Shifte escolha Texto
Cabeça: trata todos os valores corretamente como texto, sem exceção
Desvantagem: mais etapas do que um simples clique duplo
Maneira ruim
Abra um CSV com clique duplo ou a caixa de diálogo Abrir do Excel com
Desvantagem: o manipulador CSV interno do Excel interpreta mal os valores com um sinal à esquerda
-
ou inicial=
como uma fórmula, em vez de textoDesvantagem: você perderá zeros à esquerda de valores binários,
0001
devido ao formato de coluna detectado automaticamente pelo ExcelBoa maneira (para VBA)
Use QueryTables (a contrapartida do VBA para
Get external data
) → Código de exemploCabeça: trata todos os valores corretamente como texto, sem exceção
Desvantagem: um pouco mais de código que
OpenText
métodoMau caminho (para VBA)
Use
Workbooks.OpenText
método → Código de exemploDesvantagem: esse método ainda está usando o manipulador de importação CSV interno do Excel com todas as suas falhas
Desvantagem: Além disso, o
fieldinfo
parâmetro deOpenText
é ignorado se a extensão for CSV. Normalmente, esse parâmetro permite escolher todos os formatos de coluna, mas não se a extensão for CSV. Você pode ler mais sobre esse comportamento no Stack OverflowRenomear temporariamente a extensão de origem de CSV para TXT e depois para CSV é uma solução válida se você tiver controle total sobre o arquivo de origem
Métodos adicionais
Se você tiver acesso à fonte que cria seu CSV, poderá alterar a sintaxe do CSV.
Coloque todo valor entre aspas duplas e prefixe um sinal de igual como
="00001"
ou adicione uma tabulação a cada valor. Ambas as formas forçarão o Excel a tratar o valor como textoConteúdo original do CSV
CSV no Excel quando aberto via clique duplo
Observe como a linha 2 (método de aspas duplas) e a linha 3 (método de tabulação) não são alteradas pelo Excel
Abra o CSV no bloco de notas e copie e cole todos os valores no Excel. Em seguida, use Dados - texto em colunasPosterior: O texto em Colunas para alterar os formatos das colunas, de geral para o texto, gera resultados inconsistentes. Se um valor contiver um
-
caractere entre caracteres (por exemplo, "= E1-S1"), o Excel tentará dividir esse valor em mais de uma coluna. Os valores localizados à direita dessa célula podem ser substituídos(o comportamento do texto nas colunas foi alterado em algum lugar entre o Excel 2007 e 2013, para que não funcione mais)
Suplemento do Excel para abrir CSVs e importar todos os valores como texto
Este é um plug-in do Excel para simplificar as ações de importação de CSV.
A principal vantagem: é uma solução e usos com um clique
QueryTables
, o mesmo método à prova de balas por trás de Obter dados externosInstalação
%appdata%\Microsoft\AddIns
File tab → Options → Add-Ins → Go To
e selecioneImportCSV.xla
File tab → Options → Trust Center → Trust Center Settings → Macro Settings → Enable all macros
Você notará uma nova entrada da barra de menus chamada Suplementos e usará esse botão para abrir rapidamente seus arquivos CSV sem passar pelo incômodo da caixa de diálogo Importar
Script do PowerShell para abrir CSVs diretamente do Windows Explorer
Você pode usar um script do PowerShell para abrir arquivos CSV e passá-los automaticamente para o Excel. O script usa silenciosamente o método de importação de texto do Excel, que trata os valores sempre como texto e, como bônus, lida com a codificação UTF-8
C:\my\folder\myScript.ps1
. (Observe a extensão.ps1
)shell:sendto
» EnterAgora você pode selecionar (vários) CSVs e abri-los no Excel via
Right-click » SendTo » Excel
fonte
Você pode tentar primeiro abrir um .xlsx, depois criar uma conexão de dados e importar o .csv. Selecione delimitado por "vírgula" e, em seguida, selecione a opção para tratar todas as colunas como texto em vez de "Geral".
Edit: Ah, eu não li completamente a pergunta. No assistente de importação, selecione o cabeçalho da primeira coluna que você deseja importar como texto, role até o cabeçalho da coluna final e Shift + Clique no cabeçalho. Em seguida, selecione a opção radial "Texto".
fonte
A sugestão de Wetmelon funciona (mesmo com .CSV) se você fizer o seguinte:
Sei que são mais etapas, mas pelo menos me permite abrir CSVs dessa maneira sem precisar alterar a extensão
fonte
Cuidado!
Ao usar o método manual "Excel → Dados → Obter dados externos → Selecione todas as colunas e escolha Texto" ......
Isso definirá apenas as colunas para o texto "com dados na primeira linha" (normalmente uma linha de cabeçalho). Este assistente não mostra as colunas mais à direita que podem ter dados mais abaixo, mas não na primeira linha. Por exemplo:
Row1Col1, Row1Col2, Row1Col3
Row2Col1, Row2Col2, Row2Col3, Row2Col4
Você nunca verá a Col 4 no assistente de importação, portanto não terá a opção de alterá-la do geral para o formato de texto antes de importar !!!!
fonte
Aqui está o procedimento alternativo ao código postado acima por Jean-François Corbett
Este procedimento importará o arquivo csv para o Excel com todas as colunas formatadas como texto
fonte
Se você estiver sempre importando os mesmos dados (formato de registro constante, layout, etc ...), poderá gravar uma macro do Access usando uma especificação de importação e depois despejar os dados novamente no Excel. Feito isso pode vezes. A outra maneira que eu fiz isso é usar o VBA e ler os dados na planilha, um registro de cada vez, e analisá-los enquanto lê. Tanto quanto sei, não há como definir um formato padrão durante a importação no Excel e, mesmo se você pudesse, isso causaria problemas com o próximo tipo de arquivo que você tenta analisar.
fonte
A pedido, enviando meu comentário como resposta (com um pouco mais de informação adicionada):
Hey Scripting Guy publicou um artigo de blog sobre a importação de CSV para o Excel que pode ter alguns detalhes úteis para você. Brincar com o objeto de dados no PowerShell pode permitir que você faça o que deseja.
Embora o artigo mencione especificamente a importação de dados para as células, o que pode deixar o formato numérico, pode ser possível brincar com algumas das propriedades e métodos do Excel ComObject para forçar os dados a inserir as células como texto bruto (ou forçar a formatação das células em texto antes ou depois da importação).
fonte
Por motivos desconhecidos, mesmo que você forneça explicitamente formatos para todas as colunas, o Excel o ignorará se a extensão do arquivo for CSV.
Algumas opções:
Crie uma consulta para importar os dados, como sugere o Wetmelon .
Desvantagem: pode estar faltando drivers de banco de dados CSV em uma máquina de 64 bits.
Use o código de Jean , mas incorpore a cópia do arquivo em uma pasta temporária e altere a extensão da cópia.
Desvantagem: Nenhum link para o arquivo original (o salvamento substituirá a cópia); você terá que excluir manualmente a cópia posteriormente. Ainda assim, você pode salvar manualmente como no CSV original.
Abra o CSV no bloco de notas Ctrl+A, Ctrl+C, cole para o Excel, em seguida, Dados - Texto para colunas, então é o assistente de costume onde você pode definir todas as colunas de texto de uma só vez. É um sabor diferente da opção anterior, porque também oculta a preciosa extensão do Excel.
Desvantagem: manual.
Tenha um loop VBA muito simples que lê o arquivo inteiro na memória e o coloca na planilha, célula por célula.
Desvantagem: mais lento, feio.
fonte
Se eu entendi a pergunta corretamente, isso é facilmente resolvido usando a opção Transpose em Paste-Special, conforme descrito aqui .
fonte