sábado, 22 de agosto de 2009

Arquivos Excel no Genexus

Genexus possui recursos muito simples e interessantes que implementam um 'que' de aplicação integrada, e que podem ser utilizados em seus projetos sem maiores complicações. Um desses recursos é a geração de arquivos XLS (MS-Excel), e que opera de forma similar ao de geração de DOC´s (MS-Word). Nesta página daremos o caminho das pedras para utilizar esse recurso, com a contribuição, do Eng. Claudio Shinji, autor original do trabalho.

Antes de mais nada é necessário obter e instalar uma biblioteca chamada JAKARTA-POI, através do site http://sourceforge.net/projects/jbyjsharp/files/Jakarta%20POI/, e que originalmente consiste na API 'Java' para manipulação de arquivos no formato OLE2 Microsoft, mas que no projeto do sourceforge foi gentilmente traduzido para .NET e J#. Esse exemplo foi programado no Genexus 9.0, X e Ev RC, e .NET C# sem maiores complicações, se seu ambiente não for esse, favor providenciar as bibliotecas adequadas.

OLE2 Microsoft é um formato OpenXML, que na prática permite a leitura e escrita de arquivos MS Word, MS PowerPoint e MS Excel. A instalação deve ser feita dentro da pasta BIN que se encontra na pasta WEB do modelo criado no Genexus, entendendo-se 'instalação' apenas a cópia das DLL´s para esse local.

Para evitar maiores confusões também instale o Microsoft J#, que pode ser obtido em http://www.microsoft.com/downloads/details.aspx?familyid=F72C74B3-ED0E-4AF8-AE63-2F0E42501BE1&displaylang=enhttp://www.microsoft.com/downloads/details.aspx?familyid=F72C74B3-ED0E-4AF8-AE63-2F0E42501BE1&displaylang=en

A planilha será criada em um local abaixo do diretório ROOT da aplicação, ou seja, em nosso caso, abaixo da pasta WEB. Voce pode inclusive criar uma pasta chamada EXCEL para guardar esses arquivos organizadamente. O acesso ao arquivo gerado deve ser feito pela web por meio de uma URL que aponte para esse arquivo nessa tal pasta EXCEL. Desta forma são necessárias duas informações: local fisico de armazenamento (C:\Inetpub\wwwroot\AplicacaoGenexus\ Excel\planilha.xls) e a URL que aponta para o arquivo (http://www.algumlugar.com.br/%20aplicacaogenexus/excel/planilha.xls)

Programação da Coisa

Passada a fase dos ajustes no servidor, agora voce deve programar (enfim!), e não muita coisa é necessária para se produzir a planilha.

Declaração de variáveis, apenas uma Planilha do tipo ExcelDocument, uma linha do tipo Numeric e uma Arquivo do tipo Character(30).

A programação é simples, bastando seguir os passos apresentados a seguir.

Event 'excel'
&Planilha.UseAutomation = 0
&Arquivo = 'C:\inetpub\wwwroot\Aplicacao\excel\planilha.xls'
&Planilha.Open(&Arquivo)

if &Planilha.ErrCode <> 0
msg(&Planilha.ErrDescription)
else
&Planilha.Clear()

&Planilha.Cells(1,1).Text = 'Id'
&Planilha.Cells(1,1).Italic = 1
&Planilha.Cells(1,1).Bold = 1

&Planilha.Cells(1,2).Text = 'Nome'
&Planilha.Cells(1,2).Italic = 1
&Planilha.Cells(1,2).Bold = 1
&linha = 2

For each line in Grid1
&Planilha.Cells(&linha,1).text = CidadeId.ToString()
&Planilha.Cells(&linha,1).Color = 3
&Planilha.Cells(&linha,2).Text = CidadeNome.ToString()
&Planilha.Cells(&linha,2).Color = 3
&linha = &linha + 1
endfor

&Planilha.Save()
TextBlock1.Caption = "planilha"

endif

EndEvent

Em vermelho voce encontra um controle TextBlock (HTML format) que deve apontar para a URL onde foi gravada a planilha. Em azul o local fisico onde o arquivo da planilha deve ser criada.


O exemplo abre um GRID em um WebPanel apresentando uma tabela de Cidades, e em seguida através de um botão, o evento 'Excel' é chamado e a planilha criada com os registros apresentados no GRID. Observe que o tratamento da planilha é realizado por meio de suas células, e a programação apenas preenche essas células com informação.
E o resultado é uma planilha que pode ser visualizada clicando-se no link 'planilha'.
Bom trabalho!



8 comentários:

Anônimo disse...

Foi muito util.
Muito bom.. Parabens.

Anônimo disse...

muito bom
mas queria saber se tem como
eu gerar as informações e valores e ja colocar um grafico qualquer na geracao da planilha automaticamente

Grato

Anônimo disse...

seria muito interessante exportar um relatorio em excel com o grafico mais nao sei como fazer uso gxchart que tambem pode fazer isso tanto via win com web

Douglas Hamilton de Oliveira disse...

Para sistemas com 64 bits, utilizar o ExcelLite ao invés do JakartaPOI, que não funciona corretamente apresentando uma mensagem de erro.
Baixar o ExcelLite (GemBox) do link http://www.gemboxsoftware.com/spreadsheet/free-version, e após a instalação, copiar a DLL GemBox.Spreadsheet.dll, localizada em C:\Program Files (x86)\GemBox Software\GemBox.Spreadsheet Free 3.3\Bin\NET20, na pasta BIN da aplicação web.
Para saber mais a respeito deste problema: http://www2.gxtechnical.com/main21/hscver01d.aspx?E%3B15%3B4%3B61%3B2%3B1%3BO%3B,2,19780

Anônimo disse...

Estou utilizando a dll do GemBox, porém a versão free escreve uma aba na planilha que eu estou lendo, há uma forma de desabilitar esta escrita com código nativo c# dentro do genexus, mas ainda não sei como fazer, alguem sabe como ou já fez isso?

Anônimo disse...

Como gerar um relatório que contenha varias plans em apenas um documento de Excel, onde cada plan traga informações diferentes????

Anônimo disse...

Estou com o seguinte problema, estou gerando um relatório com imagem para documento word.
O problema é que a imagem não é incorporada no documento e sim fica uma referencia do caminho onde a imagem está no servidor.
Pois bem, como é documento word o usuário irá salvar localmente este arquivo e ao abrir novamente este arquivo as imagens não são localizadas pois como estavam somente com as referencias não as localiza mais.

Robson Dicas disse...

amigo e se eu tiver a necessidade de colocar uma imagem?