quarta-feira, 23 de março de 2016

Gerar Planilha Excel a partir um Relatório do Delphi 7

Essa semana na empresa me foi solicitado que gerasse algumas Planilhas Excel a partir de certos relatórios para alguns clientes. Portanto disponibilizo aqui a solução mais simples que eu implementei para essa questão.

Para o exemplo, iremos gerar uma planilha Excel a partir de uma tabela de Produtos fictícia. Primeiramente criei uma conexão para a tabela via dbExpress (1 TSQLQuery da paleta "dbExpress", 1 TDataSetProvider da paleta "Data Access" e 1 TClientDataSet da paleta "Data Access"). Não esqueça de fazer a ligação entre os 3 componentes através das propriedades DataSet e ProviderName. Além disso criei um botão para Gerar a planilha Excel:


Após adicionar os objetos à tela, criaremos uma procedure responsável por gerar de fato o Excel. Na seção public do form, declare o cabeçalho da procedure (que no caso chamei de ExportaExcel):

public
    { Public declarations }
    procedure ExportaExcel(DataSet: TDataSet; Arq: string);

Após criar o cabeçalho, digite simultaneamente SHIFT + CTRL + C para criar automaticamente a procedure no fim do form. Após isso, digite o conteúdo da mesma:

procedure TFRelatorioProdutos.ExportaExcel(DataSet: TDataSet;
Arq: string);
var
  ExcApp: OleVariant;
  i,l: integer;
begin
  ExcApp := CreateOleObject('Excel.Application');
  ExcApp.Visible := True;
  ExcApp.WorkBooks.Add; QryProd.First;
  l := 1; //Adicionar titulos
  for i := 0 to QryProd.Fields.Count - 1 do
  begin
    ExcApp.WorkBooks[1].Sheets[1].Cells[l,i + 1] :=
      QryProd.Fields[i].DisplayName;
  end;
  l := 2;
  QryProd.First;
  while not QryProd.EOF do
  begin
    for i := 0 to QryProd.Fields.Count - 1 do
      ExcApp.WorkBooks[1].Sheets[1].Cells[l,i + 1] :=
        QryProd.Fields[i].DisplayText;
      QryProd.Next; l := l + 1; end;
      ExcApp.WorkBooks[1].SaveAs(Arq);
end;

Após criarmos nossa procedure responsável por gerar de fato o Excel, dê um duplo clique no botão "Gerar Excel" e digite os seguintes comandos para abrir a query e logo em seguida chamar nossa procedure :


  QryProd.Close;
  ExQryProd.SQL.Clear;
  ExQryProd.SQL.Add(' select CODIGO, DESCRICAO, UNIDADE, ' +
                    ' QUANTIDADE, PRECO_VAREJO ' +
                    ' from PRODUTOS ');
  ExQryProd.Prepared := True;
  QryProd.Open;



  try
    ExportaExcel(QryProd, '');
  Except;
    //
  end;

Agora basta rodar sua aplicação e fazer o teste prático para criar sua planilha Excel
a partir dos dados contidos na tabela fictícia Produtos.

Conclusões

Notamos neste artigo a facilidade de se gerar planilhas Excel a
partir de querys no Delphi 7. Forte abraço e até o próximo tutorial.

--