Eu produzo um relatório como um arquivo CSV. Quando tento abrir o arquivo no Excel, ele faz uma suposição sobre o tipo de dados com base no conteúdo da célula e o reformata de acordo.
Por exemplo, se o arquivo CSV contém
...,005,...
Em seguida, o Excel mostra como 5. Existe uma maneira de substituir isso e exibir 005?
Eu preferiria fazer algo no próprio arquivo, para que o usuário pudesse apenas clicar duas vezes no arquivo CSV para abri-lo.
Eu uso o Excel 2003.
excel
csv
formatting
number-formatting
Sergey Stadnik
fonte
fonte
Respostas:
Não há uma maneira fácil de controlar a formatação que o Excel aplica ao abrir um arquivo .csv. No entanto, estão listadas abaixo três abordagens que podem ajudar.
Minha preferência é a primeira opção.
Opção 1 - Alterar os dados no arquivo
Você pode alterar os dados no arquivo .csv da seguinte maneira ..., = ”005” , ... Isso será exibido no Excel como ..., 005 , ...
O Excel terá mantido os dados como uma fórmula, mas copiar a coluna e usar os valores especiais colar irá livrar-se da fórmula, mas manterá a formatação
Opção 2 - formatar os dados
Se for simplesmente um problema de formato e todos os seus dados nessa coluna tiverem um comprimento de três dígitos. Em seguida, abra os dados no Excel e formate a coluna que contém os dados com este formato personalizado 000
Opção 3 - Alterar a extensão do arquivo para .dif (formato de intercâmbio de dados)
Altere a extensão do arquivo e use o assistente de importação de arquivo para controlar os formatos. Arquivos com extensão .dif são abertos automaticamente pelo Excel ao clicar duas vezes em.
Passo a passo:
fonte
Não use CSV, use SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)
Ele oferece muito mais controle sobre a formatação e o Excel não tentará adivinhar o tipo de um campo examinando o conteúdo. Parece um pouco complicado, mas você pode se safar usando um subconjunto muito pequeno.
fonte
Isso funciona para Microsoft Office 2010, Excel Versão 14
Não entendi bem a preferência do OP de "fazer algo com o próprio arquivo". Ainda estou guardando para quem deseja uma solução para formatar a importação diretamente
fonte
Você pode simplesmente formatar seu intervalo como Texto.
Também aqui está um bom artigo sobre os formatos de número e como você pode programá-los.
fonte
Na verdade, descobri que, pelo menos a partir do Office 2003, você pode salvar uma planilha do Excel como um arquivo XML. Assim, posso produzir um arquivo XML e ao clicar duas vezes nele, ele será aberto no Excel. Ele fornece o mesmo nível de controle que SYLK, mas a sintaxe XML é mais intuitiva.
fonte
Adicionar um espaço ininterrupto na célula pode ajudar. Por exemplo:
"firstvalue";"secondvalue";"005 ";"othervalue"
Isso força o Excel a tratá-lo como um texto e o espaço não fica visível. No Windows, você pode adicionar um espaço ininterrupto digitando alt + 0160. Veja aqui para mais informações: http://en.wikipedia.org/wiki/Non-breaking_space
Tentei no Excel 2010. Espero que isso possa ajudar as pessoas que ainda buscam uma solução bastante adequada para este problema.
fonte
Eu tive esse problema ao exportar dados CSV do código C # e resolvi isso adicionando o caractere de tabulação \ t antes dos dados do zero à esquerda, então os dados foram interpretados como texto em vez de numéricos no Excel (mas ao contrário de outros caracteres, não ser visto).
Eu gostei da abordagem = "001", mas isso não permitiria que os dados CSV exportados fossem reimportados para meu aplicativo C # sem remover toda a formatação do arquivo CSV de importação (em vez disso, apenas cortarei os dados de importação) .
fonte
Acredito que quando você importa o arquivo, você pode selecionar o tipo de coluna. Torne-o Texto em vez de Número. Não tenho uma cópia na minha frente no momento para verificar, no entanto.
fonte
Carregar csv em oleDB e forçar todos os tipos de dados inferidos para string
Eu fiz a mesma pergunta e respondi com o código.
basicamente, quando o arquivo csv é carregado, o driver oledb faz suposições, você pode dizer quais suposições fazer.
Meu código força todos os tipos de dados a uma string ... é muito fácil alterar o esquema. para meus propósitos, usei um xslt para fazer o ti da maneira que queria - mas estou analisando uma grande variedade de arquivos.
fonte
Sei que essa é uma pergunta antiga, mas tenho uma solução que não está listada aqui.
Quando você produz o csv, adicione um espaço após a vírgula, mas antes do seu valor, por exemplo
, 005,
.Isso funcionou para evitar a formatação automática de data no Excel 2007 de qualquer maneira.
fonte
O método do Assistente de importação de texto NÃO funciona quando o arquivo CSV importado tem quebras de linha em uma célula. Este método lida com este cenário (pelo menos com dados delimitados por tabulação):
fonte
Basta adicionar 'antes do número no documento CSV.
fonte
Isso tem me deixado louco o dia todo (já que você não pode controlar os tipos de coluna do Excel antes de abrir o arquivo CSV), e funcionou para mim, usando VB.NET e Excel Interop:
'Convert .csv file to .txt file. FileName = ConvertToText(FileName) Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _ {2, xlTextFormat}, _ {3, xlGeneralFormat}, _ {4, xlGeneralFormat}, _ {5, xlGeneralFormat}, _ {6, xlGeneralFormat}} 'We are using OpenText() in order to specify the column types. mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes) mxlWorkBook = mxlApp.ActiveWorkbook mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet) Private Function ConvertToText(ByVal FileName As String) As String 'Convert the .csv file to a .txt file. 'If the file is a text file, we can specify the column types. 'Otherwise, the Codes are first converted to numbers, which loses trailing zeros. Try Dim MyReader As New StreamReader(FileName) Dim NewFileName As String = FileName.Replace(".CSV", ".TXT") Dim MyWriter As New StreamWriter(NewFileName, False) Dim strLine As String Do While Not MyReader.EndOfStream strLine = MyReader.ReadLine MyWriter.WriteLine(strLine) Loop MyReader.Close() MyReader.Dispose() MyWriter.Close() MyWriter.Dispose() Return NewFileName Catch ex As Exception MsgBox(ex.Message) Return "" End Try End Function
fonte
Ao abrir um CSV, você obtém o assistente de importação de texto. Na última etapa do assistente, você deve ser capaz de importar a coluna específica como texto, mantendo assim o prefixo '00'. Depois disso, você pode formatar a célula da maneira que desejar.
Tentei com o Excel 2007 e pareceu funcionar.
fonte
Bem, o Excel nunca exibe o assistente para arquivos CSV. Se você renomeá-lo para .txt, verá o assistente quando fizer um Arquivo> Abrir no Excel na próxima vez.
fonte
Coloque uma aspa simples antes do campo. O Excel o tratará como texto, mesmo que se pareça com um número.
EDIT: Isso está errado. O truque do apóstrofo só funciona ao inserir dados diretamente no Excel. Quando você o usa em um arquivo CSV, o apóstrofo aparece no campo, o que você não quer.
http://support.microsoft.com/kb/214233
fonte