Você está na página 1de 5

Criando planilhas do Excel com o Delphi

 Autor: Yoshio Iwamoto


 November 28, 2007
 Categoria: Windows, Offtopic

É sempre importante saber exportar dados para vários formatos, seja para XML, CSV ou
até HTML. E quando o cliente quer algum tipo de documento “palpável” para ele analisar,
como os relatórios?
No Delphi tem gente que gosta de usar o Quickreport, outras preferem (ou são obrigadas) a
utilizar o Rave Report ou Crystal Reports. Mas hoje eu vou mostrar como criar um relatório
ou exportar dados utilizando planilhas do Excel.

Talvez você não precise criar relatórios em planilhas do Excel, mas vou contar um caso que
ocorreu com um amigo meu...

Esse meu amigo estava fazendo um sisteminha em Delphi para rodar na versão japonesa do
Windows XP. Mas a versão do Delphi dele não tinha Quickreport, só tinha o Rave Report,
e o Rave Report não exibia caracteres japoneses. Como eu... digo, esse meu amigo,
precisava de uma solução rapidamente, ele resolveu exportar os dados para o Excel. Assim
resolveria o problema de exibição dos caracteres japoneses e o cliente teria um arquivo que
é familiar a ele, tanto para somente visualizar quanto para imprimir os dados/relatório.

É mais complicado e lento gerar planilhas no Excel do que gerar relatórios no Rave Report,
mas em compensação os dados exportados ficam melhor formatados e maleáveis.

Passos:
- Adicione a unit ExcelXP
- Adicionar as variaveis globais
- Instâncie os componentes no OnCreate
- Adicione um botao no Form
- Gerar a planilha no OnClick do botão
- Liberar a memoria no OnClose

1. unit Unit1;
2.
3. interface
4.
5. uses
6. Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
7. Dialogs, StdCtrls, ExcelXP;
8.
9. type
10. TForm1 = class(TForm)
11. Button1: TButton;
12. procedure FormCreate(Sender: TObject);
13. procedure FormClose(Sender: TObject; var
Action: TCloseAction);
14. procedure Button1Click(Sender: TObject);
15. private
16. { Private declarations }
17. public
18. { Public declarations }
19. end;
20.
21. var
22. Form1: TForm1;
23. LCID: Integer;
24. ExcelApplication1: TExcelApplication;
25. ExcelWorkbook1: TExcelWorkbook;
26. ExcelWorksheet1: TExcelWorksheet;
27. implementation
28.
29. {$R *.dfm}
30.
31. procedure TForm1.FormCreate(Sender: TObject);
32. begin
33. ExcelApplication1 :=
TExcelApplication.Create(nil);
34. ExcelWorkbook1 := TExcelWorkbook.Create(nil);
35. ExcelWorksheet1 := TExcelWorksheet.Create(nil);
36. end;
37.
38. procedure TForm1.FormClose(Sender: TObject; var
Action: TCloseAction);
39. begin
40. ExcelWorksheet1.Free;
41. ExcelWorkbook1.Free;
42. ExcelApplication1.Free;
43. end;
44.
45. procedure TForm1.Button1Click(Sender: TObject);
46. begin
47. LCID := GetUserDefaultLCID;
48.
49. ExcelApplication1.DisplayAlerts[LCID] := False;
50.
51. ExcelApplication1.Workbooks.Add(EmptyParam,
LCID);
52.
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]
as _Workbook);
53.
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1]
as _Worksheet);
54.
55. ExcelWorksheet1.Activate(LCID);
56. ExcelApplication1.ScreenUpdating[LCID] := true;
57.
58. // nome da planilha (que aparece na aba)
59. ExcelWorksheet1.Name := 'Relatório ou
Exportação';
60.
61.
62. { inserindo dados na planilha }
63.
64. // colocando titulo na primeira celula da
planilha
65. ExcelWorksheet1.Range['A1', 'A1'].Value2 :=
'Título';
66.
67. // unindo as células de A1 ate C1 para o titulo
ocupar 3 colunas
68. ExcelWorksheet1.Range['A1', 'C1'].Merge(True);
69.
70. // formatando o titulo
71. ExcelWorksheet1.Range['A1', 'C1'].Font.Bold :=
True;
72. ExcelWorksheet1.Range['A1', 'C1'].Font.Size :=
16;
73. ExcelWorksheet1.Range['A1', 'C1'].Font.Color :=
RGB(255,0,0);
74. ExcelWorksheet1.Range['A1',
'C1'].HorizontalAlignment := xlCenter;
75. ExcelWorksheet1.Range['A1',
'C1'].VerticalAlignment := xlCenter;
76.
77. // colocando os nomes dos campos na segunda linha
78. ExcelWorksheet1.Range['A2', 'A2'].Value2 :=
'Campo1';
79. ExcelWorksheet1.Range['B2', 'B2'].Value2 :=
'Campo2';
80. ExcelWorksheet1.Range['C2', 'C2'].Value2 :=
'Campo3';
81. ExcelWorksheet1.Range['A2', 'C2'].Font.Bold :=
True;
82. ExcelWorksheet1.Range['A2', 'C2'].Font.Color :=
RGB(0,0,255);
83. ExcelWorksheet1.Range['A2',
'C2'].HorizontalAlignment := xlCenter;
84. ExcelWorksheet1.Range['A2',
'C2'].VerticalAlignment := xlCenter;
85.
86. // colocando os valores
87. ExcelWorksheet1.Range['A3', 'A3'].Value2 :=
'Valor1';
88. ExcelWorksheet1.Range['B3', 'B3'].Value2 :=
'Valor2';
89. ExcelWorksheet1.Range['C3', 'C3'].Value2 :=
'Valor3';
90. ExcelWorksheet1.Range['A4', 'A4'].Value2 :=
'Valor4';
91. ExcelWorksheet1.Range['B4', 'B4'].Value2 :=
'Valor5';
92. ExcelWorksheet1.Range['C4', 'C4'].Value2 :=
'Valor6';
93.
94. // colocando borda nas celulas dos valores
95. ExcelWorksheet1.Range['A3',
'C4'].Borders.Weight := xlThin;
96.
97. ExcelWorksheet1.Range['A3',
'C4'].HorizontalAlignment := xlCenter;
98. ExcelWorksheet1.Range['A3',
'C4'].VerticalAlignment := xlCenter;
99.
100.
101. { formatando a pagina de impressão }
102.
103. // ajusta o tamanho das colunas
104. ExcelWorksheet1.Cells.EntireColumn.AutoFit;
105.
106. // define borda de impressao com cerca de 1cm
107. ExcelWorksheet1.PageSetup.BottomMargin := 30;
108. ExcelWorksheet1.PageSetup.LeftMargin := 30;
109. ExcelWorksheet1.PageSetup.RightMargin := 30;
110. ExcelWorksheet1.PageSetup.TopMargin := 30;
111.
112. // deixa a planilha no centro da pagina
horizontalmente
113. ExcelWorksheet1.PageSetup.CenterHorizontally :=
True;
114.
115.
116. // imprime o numero da pagina no rodapé
117. // '&P' e o codigo para numero de pagina
118. ExcelWorksheet1.PageSetup.CenterFooter := '&P';
119.
120. // Exibe o programa do Excel com a planilha
criada
121. ExcelApplication1.Visible[LCID] := True;
122. end;
123.
124. end.

E este é o resultado final:

Enquanto os objetos não forem destruídos o Excel estará aberto na memória, por isso tem
uns "Frees" no OnClose do Form. Aqui tem outro comandos que podem ser usados:

1. // abre o PrintPreview (use depois do


"ExcelApplication1.Visible[LCID] := True;")
2. ExcelWorksheet1.PrintPreview;
3.
4. // folha na horizontal
5. ExcelWorksheet1.PageSetup.Orientation := xlLandscape;
6.
7. // impressao em preto e branco
8. ExcelWorksheet1.PageSetup.BlackAndWhite := True;
9.
10. // Salva a planilha
11. ExcelWorksheet1.SaveAs('c:\caminho\onde\voce\quer\
salvar\planilha.xls');

Não dei muitos detalhes sobre os componentes utilizados, mas acho que já deve ajudar
bastante pra procurar o resto

Você também pode gostar