Função para exportar dados de uma ibquery para o excel - simples e funciona!
// Função para exportar Dados de uma IBQuery para planilha do Excel // Por: Ricardo Scache Belardinuci - ri-taqua@ig.com.br // Testada na Versão 2003 do Excel // IMPORTANTE: Declare a unit ComObj na 1º cláusula Uses - EXEMPLO: // uses // Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, // ComObj;
procedure ExportarDadosParaExcel(Qry: TIBQuery; RealComoInteiro: Boolean = True); var
Linha, Coluna, ValorCampoI, NumRegistros: integer;
Planilha: variant;
ValorCampoS: string; begin ifnot Qry.IsEmpty then begin try
Planilha:= CreateOleObject('Excel.Application');
Planilha.Workbooks.Add(1);
Planilha.Caption:='Exportação de Dados Para o Excel';
Planilha.Visible:=True; except
Application.MessageBox('Erro ao Exportar Dados para o Excel!','Atenção',MB_OK+MB_ICONERROR);
Abort; end; with Qry do begin
DisableControls;
Last;
First;
NumRegistros:= RecordCount; for Linha:=0 to NumRegistros - 1 do begin for Coluna:=1 to FieldCount do begin // Para não exportar um determinado campo, abra o Fields Editor da // da IBQuery, selecione o Campo e altere o valor da Tag para -1 if Fields[Coluna-1].Tag = 0 then begin
ValorCampoS:= Fields[Coluna-1].AsString; // Se Desejar que os valores fracionados sejam exportados no formato original, // então, ao chamar a função, passe no 2º parâmetro o valor False // Chamada: ExportarDadosParaExcel(IBQuery1, False); // Nesse caso, por exemplo, o valor |12,3| será exportado como |12,3| if (Fields[Coluna-1] is TStringField) or (not RealComoInteiro) or (Trim(Fields[Coluna-1].AsString) ='') then
Planilha.Cells[Linha+2,Coluna]:=ValorCampoS else begin // Nesse caso, os valores fracionados serão exportados como inteiros // e a função deverá ser chamada simplismente assim: ExportarDadosParaExcel(IBQuery1); // Exemplo: o Valor |12,3| será exportado como |12|
ValorCampoI:= Fields[Coluna-1].AsInteger;
Planilha.Cells[Linha+2,Coluna]:=ValorCampoI; end; end; end;
Next; end; //Cabeçalho das Colunas ////////////////////////////////// for Coluna:=1 to FieldCount do begin // Para não exportar um determinado campo, abra o Fields Editor da // Query, selecione o Campo e altere o valor da Tag para -1 if Fields[Coluna-1].Tag = 0 then begin
ValorCampoS:= Fields[Coluna-1].DisplayLabel;
Planilha.Cells[1,Coluna]:=ValorCampoS; end; end;
First;
EnableControls; end;
Planilha.Columns.AutoFit; end else
Application.MessageBox('Não há Dados para serem exportados para o Excel!','Atenção',MB_OK+MB_ICONINFORMATION); end;