Pergunta

Eu produzir um relatório como um arquivo CSV. Quando tento abrir o arquivo em Excel, faz uma suposição sobre o tipo de dados com base no conteúdo da célula e reformata-lo em conformidade.

Por exemplo, se o arquivo CSV contém

...,005,...

Em seguida, Excel mostra-lo como 5. Existe uma maneira de substituir esse e exibir 005?

Eu preferiria fazer alguma coisa para o arquivo em si, de modo que o usuário pode simplesmente clicar duas vezes sobre o arquivo CSV para abri-lo.

Eu uso o Excel 2003.

Foi útil?

Solução

Não há uma maneira fácil de controlar o Excel formatação aplica ao abrir um arquivo .csv. No entanto listados abaixo são três abordagens que ajuda poder.

A minha preferência é a primeira opção.

Opção 1 - Alterar os dados no arquivo

Você pode alterar os dados no arquivo .csv como segue ..., =”005” , ... Esta será exibido no Excel como ..., 005 , ...

Excel vai ter mantido os dados como uma fórmula, mas copiar a coluna e usando colar valores especiais vai se livrar da fórmula, mas manter a formatação

Opção 2 - formatar os dados

Se é simplesmente uma questão de formato e todos os seus dados nessa coluna tem um comprimento de três dígitos. Em seguida, abra os dados no Excel e, em seguida, formatar 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)

Alterar a extensão do arquivo e usar o assistente de importação de arquivo para controlar os formatos. Arquivos com uma extensão .dif são automaticamente abertos pelo Excel quando duplo clicado.

Passo a passo:

  • Alterar a extensão do arquivo de .csv para .dif
  • Clique duas vezes no arquivo para abri-lo no Excel.
  • será lançado
  • O 'File Import Wizard'.
  • Definir o 'Tipo de arquivo' para 'Delimitado' e clique no botão 'Next'.
  • Em delimitadores, carrapato 'vírgula' e clique no botão 'Next'.
  • Clique em cada coluna de dados que é exibido e selecione um 'formato de dados da coluna'. A coluna com o valor '005' deve ser formatado como 'Texto'.
  • Clique no botão Concluir, o arquivo será aberto pelo Excel com os formatos que você especificou.

Outras dicas

Não use CSV, o uso SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

Ela dá muito mais controle sobre formatação e Excel não irá tentar adivinhar o tipo de um campo examinando o conteúdo. Parece um pouco complicado, mas você pode ir longe com o uso de um subconjunto muito pequeno.

Isso funciona para Microsoft Office 2010, Excel versão 14

Eu descaracterizou a preferência do OP "fazer alguma coisa para o arquivo em si." Eu ainda estou mantendo isso para aqueles que querem uma solução para formatar a importação diretamente

  1. Abra um arquivo em branco (novo) (Arquivo -> Novo livro)
  2. Abra o Assistente de Importação (Data -> From Text)
  3. Selecione o arquivo .csv e importar
  4. Na caixa de diálogo, escolha 'delimitado', e clique em Avançar.
  5. Escolha os seus delimitadores (Desmarque tudo, mas 'vírgula'), escolha as qualificadores de texto (provavelmente {None}), clique em Avançar
  6. No Data visualização campo, selecione a coluna que deseja ser texto. Deve destacar.
  7. No formato de dados Coluna campo, selecione 'Texto'.
  8. Clique acabado.

Você pode simplesmente formatar o seu alcance como texto.

aqui é um artigo agradável nos formatos de número e como você pode programá-los.

Na verdade eu descobri que, pelo menos, começando com o Office 2003, você pode salvar uma planilha do Excel como um arquivo XML. Assim, eu posso produzir um arquivo XML e quando eu clicar duas vezes sobre ele, ele vai ser aberto no Excel. Ele fornece o mesmo nível de controle como SYLK, mas a sintaxe XML é mais intuitivo.

A adição de um espaço sem quebra na célula poderia ajudar. Por exemplo: "firstvalue";"secondvalue";"005 ";"othervalue"

Ele força Excel para tratá-lo como um texto e o espaço não é visível. No Windows, você pode adicionar um espaço sem quebras por tiping alt + 0160. Veja aqui para mais informações: http://en.wikipedia.org/wiki/Non-breaking_space

tentou em Excel 2010. Espero que isso pode ajudar pessoas que ainda buscam uma solução bastante adequada para este problema.

Eu tive esse problema ao exportar dados CSV de código C #, e resolveu esta, antecedendo os dados zero com a guia de caracteres \ t, de modo que os dados foram interpretados como texto em vez de numérico em Excel (ainda diferentemente prepending outros personagens, não seria visto).

Eu fiz como o = abordagem "001", mas isso não permitiria exportar dados CSV para ser novamente para minha aplicação C # reimportado sem remover toda essa formatação do arquivo de importação CSV (em vez vou apenas cortar o importar dados).

Eu acredito que quando você importar o arquivo, você pode selecionar o tipo de coluna. Torná-lo texto em vez de números. Eu não tenho uma cópia na minha frente no momento para verificar embora.

em oledb e força de todos tipos de dados inferidos a corda

i feito a mesma pergunta e, em seguida, answerd-lo com o código.

basicamente quando o arquivo CSV é carregado o driver oledb faz suposições, você pode dizer que o que os pressupostos para fazer.

As minhas forças código todos os datatypes para string embora ... é muito fácil de mudar o esquema. para os meus propósitos eu usei um XSLT para obter ti do jeito que eu queria - mas eu estou analisando uma ampla variedade de arquivos

.

Eu sei que isto é uma questão antiga, mas eu tenho uma solução que não está aqui.

Quando você produzir o CSV adicionar um espaço após a vírgula, mas antes o seu valor, por exemplo, , 005,.

Isso funcionou para evitar data auto formatação no Excel 2007 de qualquer maneira.

O texto método Assistente de importação não funciona quando o arquivo CSV a ser importado tem quebras de linha dentro de uma célula. Este método alças Este cenário (pelo menos com separador de dados delimitado):

  1. Criar novo arquivo Excel
  2. Ctrl + A para selecionar todas as células
  3. Em Número Format combobox, selecione Texto
  4. guia Abrir arquivo delimitado em editor de texto
  5. Selecionar tudo, copiar e colar em Excel

Este foi me deixando louco todo o dia (uma vez que na verdade você não pode controlar os tipos de coluna do Excel antes de abrir o arquivo CSV), e isso 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

Ao abrir um arquivo CSV, você começa o assistente de importação de texto. No último passo do assistente, você deve ser capaz de importar a coluna específica como texto, mantendo assim a '00' prefixo. Depois que você pode, em seguida, formatar a célula de qualquer maneira que você quiser.

Eu tentei com com o Excel 2007 e ele apareceu para o trabalho.

Bem, excel não aparece o assistente para arquivos CSV. Se você renomeá-lo para .txt, você verá o assistente quando você faz uma File> Open em Excel, da próxima vez.

Coloque uma aspa antes do campo. Excel irá tratá-lo como texto, mesmo se ele se parece com um número.

...,`005,...

EDIT: Esta é errado. O truque apóstrofo só funciona quando a entrada de dados diretamente no Excel. Quando você usá-lo em um arquivo CSV, o apóstrofo aparece no campo, o que você não quer.

http://support.microsoft.com/kb/214233

Basta adicionar "antes do número no doc CSV.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top