Como você evita que zeros à esquerda sejam removidos ao importar um documento do Excel usando c#

StackOverflow https://stackoverflow.com/questions/22879

  •  09-06-2019
  •  | 
  •  

Pergunta

Consigo me conectar e ler um arquivo Excel sem problemas.Mas ao importar dados como CEPs com zeros à esquerda, como evitar que o Excel adivinhe o tipo de dados e, no processo, retire os zeros à esquerda?

Foi útil?

Solução

Acredito que você tenha que definir a opção em sua string de conexão para forçar a importação textual em vez de detectá-la automaticamente.

Provider=Microsoft.ACE.OLEDB.12.0;
    Data Source=c:\path\to\myfile.xlsx;
    Extended Properties=\"Excel 12.0 Xml;IMEX=1\";

Sua milhagem pode variar dependendo da versão que você instalou.A propriedade estendida IMEX=1 informa ao Excel para tratar dados misturados como texto.

Outras dicas

Prefixo com '

Prefixar o conteúdo da célula com 'força o Excel a vê-lo como texto em vez de um número.O 'não será exibido no Excel.

Existe um hack de registro que pode forçar o Excel a ler mais do que as primeiras 8 linhas ao ler uma coluna para determinar o tipo:

Mudar

HKLM\Software\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows 

Ser 0 para ler todas as linhas ou outro número para definir esse número de linhas.

Não que isso tenha um leve impacto no desempenho.

Acho que a maneira de fazer isso seria formatar o arquivo Excel de origem de forma que a coluna fosse formatada como Texto em vez de Geral.Selecione a coluna inteira e clique com o botão direito e selecione formatar células, selecione o texto na lista de opções.

Acho que isso definiria explicitamente que o conteúdo da coluna é texto e deve ser tratado como tal.

Deixe-me saber se isso funciona.

Salvar o arquivo como um arquivo de texto delimitado por tabulações também funcionou bem.

--- Infelizmente, não podemos confiar nas colunas do Doc do Excel para permanecer em um formato específico, pois os usuários estarão colando dados nele regularmente.Não quero que o aplicativo trave se dependermos de um determinado tipo de dados para uma coluna.

prefixar com ' funcionaria, existe uma maneira razoável de fazer isso programaticamente, uma vez que os dados já existem no documento do Excel?

Enviando valor 00022556 como '=" 00022556"' do SQL Server é uma excelente maneira de lidar com o problema zero inicial

Adicione " " antes da sua string.Isso fará com que a string apareça em uma nova guia.

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