Como você evita que zeros à esquerda sejam removidos ao importar um documento do Excel usando c#
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?
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.