Este artigo surgiu de uma necessidade profissional de importar dados de uma planilha para um banco de dados porém era um sistema web e eu não podia instalar o interop do Office no servidor. Porntanto utilizei a Família OleDB do ADO para fazer essa importação e passei a não precisar mais do office para fazer importação de dados de planilha.<br /> A Leitura de uma planilha utilizando ADO funciona exatamente como se fosse uma leitura de um banco de dados qualquer, a única diferença é que devemos identificar qual a região da planilha deve ser lida quando vamos criar nosso select. O quadro abaixo exemplifica um select que lê a aba Sheet1 e começa na célula C3 e termina na célula W15
Para facilitar a didática fiz um protótipo que está disponível aqui e como podemos ver na figura a seguir é dividido em dois projetos, um site para testar o framework de importação chamado aplicacao e um projeto que é uma biblioteca de 4 classes chamado framework. Começando pelo framework que possui uma classe Intervalo que abstrai a região da planilha que será lida e uma classe Excel que é a principal classe porquê é a responsável por ler os dados da Planilha. A classe estática ExtencoesExcel possui métodos de extenção para recuperar os valores dos campos de forma tratada. O algoritimo do quadro seguir demostra a utilização da classe Excel para o carregamento dos dados da planilha e está em Default.aspx.cs do projeto aplicao
private void carregaGrid(string path/* Caminho do arquivo xls */) { Excel _excel = new Excel(path); List _lista = _excel.getTodos( new Intervalo("Sheet1") { fim = "D" }, //Inicia na Célula A1 e vai até a coluna D, na aba Sheet1 dados => //Método de montagem de Pessoas { Pessoa _retorno = new Pessoa(); //... _retorno.nome = dados.getValorCampo("Nome"); _retorno.nascimento = dados.getValorCampo("Nascimento"); _retorno.email = dados.getValorCampo("Email"); _retorno.filhos = dados.getValorCampo("Filhos"); //... return _retorno; } ); gvListagem.DataSource = _lista; gvListagem.DataBind(); }