Revista MSDN Magazine Edição 34 - Trabalhando com Excel diretamente de uma página Web
Artigo Originalmente Publicado na MSDN Magazine Edição 34
Trabalhando com Excel diretamente de uma página Web<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Antonio Borges dos Santos Filho
Ao longo do tempo em que atuo como desenvolvedor, diversas vezes me deparei com situações onde era necessário extrair informações de um banco de dados para preenchimento de planilhas. Um artifício que utilizei bastante foi o Excel.Application, que era instanciado dentro de um componente COM+ desenvolvido em Visual Basic 6.
No entanto, depois de pronto, sempre achava o resultado um pouco lento. Em um sistema que desenvolvo, deparei-me com a situação de ter de extrair um conjunto de dados provenientes de uma base em SQL Server e, a seguir, preencher automaticamente uma planilha já pré-formatada, e logo depois abrir essa planilha.
Depois de pesquisar na internet, desenvolvi uma solução em ASP.NET bastante razoável, que considerei bem superior ao que vinha utilizando até então. Para o exemplo de demonstração, utilizarei as tabelas Orders, Customers, Order Details Extended do banco Northwind, que acompanha o SQL Server 2000.
A tarefa consistiria em pegar uma planilha previamente formatada, copiá-la para uma espécie de diretório temporário, tomando o cuidado para renomeá-la (no meu exemplo utilizo o nome do usuário logado, entre outras coisas), preencher, salvar e abrir o arquivo.
Imaginei inicialmente a planilha modelo, que chamei de "matriz.xls". Essa planilha seria uma espécie de "Recibo de Ordem", e já seria formatada (Figura 1).
Figura 1. Planilha formatada no Excel
Considerei também um componente cujas classes serviriam para:
· Acesso ao banco de dados;
· Fazer as consultas;
· Gerar uma cópia de nossa planilha, preenchida e salvar com outro nome.
Dessa forma, resumindo, teríamos uma página com um DropDownList contendo as Orders, que seriam carregadas no Load da página. Considerei dois TextBoxes, onde, selecionando uma Order, seriam exibidos o Nome da Empresa e o Contato. Isso serviria meramente para termos certeza de que Order o usuário preencheria a planilha.
Teríamos também um botão, para executar um código em JavaScript, abrindo uma segunda página, para exibir a planilha preenchida. Neste exemplo, utilizei VB.NET, enquanto nas classes utilizei o C#.
Um ponto importante é que a primeira coluna foi numerada de forma que A1 = 1, A2 = 2 etc. Mais adiante, entenderemos o porquê disso.
As classes para manipulação dos dados
Iniciei criando um projeto no Visual Studio 2003 (em C#), que chamei de "clsDB". Nesse projeto, criei três classes distintas:
· clsDB, que cuida basicamente da conexão com o banco;
· clsDados, onde confeccionei as consultas do banco;
· GeraPlanilha, que trata somente da planilha.
Nota: Por questões de espaço, o código completo está disponível para download. Mais adiante comentarei as partes principais das classes mencionadas.
O namespace da aplicação chama-se DBNorthind e o do componente clsDB. Preste atenção também para a string de conexão, que na sua máquina deve ser diferente da apresentada na listagem.