Como trabalhar com Excel Variant em Delphi
Incluir exportação para o Excel no seu software é uma máquina muito poderosa e rápida. Para o seu cliente que gosta de Excel é só ele exportar e continuar trabalhando por lá se quiser acrescentar algo.
Direto para o Código
No código vou utilizar TFDQuery
e TDBGrid
porém você pode fazer o mesmo com qualquer TClientDataSet
ou outra maneira que você está utlizando.
1. Uses clauses
A principais uses clauses são:
uses
System.Win.ComObj, Vcl.DBGrids, FireDAC.Comp.Client, Datasnap.DBClient ...;
Para o Excel é apenas a ComObj
, as outras são para os dados.
2. Criar o Objeto
Esse código cria o Objeto Excel.Application e adiciona a primeira página do excel.
procedure GerarExcel(AQuery: TFDQuery);
var
Excel: OleVariant;
linha, coluna, I, X: Integer;
Caminho: string;
begin
Excel := CreateOleObject('Excel.Application');
Excel.Visible := True;
Excel.Workbooks.Add;
3. Adicionar Títulos
O código das células é representado por Cells[Linha, Coluna], no parâmetro da esquerda é só colocar a linha que deseja inserir e no parâmetro da direita a coluna. No código abaixo estou inserindo os títulos, então estão todos na primeira linha e (1º, 2º, … nº coluna).
Os outros parâmetros são intuitivos, para settar Cor, Tamanho da Fonte, Tipo da Fonte, Valor da célular, tamanho da célula.
Excel.WorkBooks[1].Sheets[1].Cells[1, 1].Font.Color :=clBlack;Excel.WorkBooks[1].Sheets[1].Cells[1, 1].Font.Size :=12;Excel.WorkBooks[1].Sheets[1].Cells[1, 1].Font.Bold := True;
Excel.WorkBooks[1].Sheets[1].Cells[1, 1] := 'Documento';
Excel.WorkBooks[1].Sheets[1].Cells[1, 1].ColumnWidth := 10;Excel.WorkBooks[1].Sheets[1].Cells[1, 2].Font.Color :=clBlack;Excel.WorkBooks[1].Sheets[1].Cells[1, 1].Font.Size :=12;Excel.WorkBooks[1].Sheets[1].Cells[1, 2].Font.Bold := True;
Excel.WorkBooks[1].Sheets[1].Cells[1, 2] := 'Conta';
Excel.WorkBooks[1].Sheets[1].Cells[1, 2].ColumnWidth := 10;
4. Adicionar Conteúdo
Para adicionar o conteúdo vamos simplesmente executar um loop no nosso TFDQuery
que é a fonte de dados e ir inserindo os dados nas células.
A variável I
irá representar a linha em que estamos e então vamos variando a coluna que os dados serão mostrados.
I := 1;
with AQuery do
begin
First;
while not Eof do
begin
Excel.WorkBooks[1].Sheets[1].Cells[I + 1, 1] := FieldByName('id_pessoa').AsString;
...
Inc(I); Next;
end;
end;
Código Completo
No primeiro método o arquivo é exportado e o Excel se mantém em aberto, então o usuário deve selecionar onde o arquivo será salvo.
No segundo método o Excel não é aberto e o arquivo é salvo de forma automática.