Criando planilhas do Excel com o Delphi
É 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
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExcelXP; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; LCID: Integer; ExcelApplication1: TExcelApplication; ExcelWorkbook1: TExcelWorkbook; ExcelWorksheet1: TExcelWorksheet; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin ExcelApplication1 := TExcelApplication.Create(nil); ExcelWorkbook1 := TExcelWorkbook.Create(nil); ExcelWorksheet1 := TExcelWorksheet.Create(nil); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ExcelWorksheet1.Free; ExcelWorkbook1.Free; ExcelApplication1.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin LCID := GetUserDefaultLCID; ExcelApplication1.DisplayAlerts[LCID] := False; ExcelApplication1.Workbooks.Add(EmptyParam, LCID); ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1] as _Workbook); ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet); ExcelWorksheet1.Activate(LCID); ExcelApplication1.ScreenUpdating[LCID] := true; // nome da planilha (que aparece na aba) ExcelWorksheet1.Name := 'Relatório ou Exportação'; { inserindo dados na planilha } // colocando titulo na primeira celula da planilha ExcelWorksheet1.Range['A1', 'A1'].Value2 := 'Título'; // unindo as células de A1 ate C1 para o titulo ocupar 3 colunas ExcelWorksheet1.Range['A1', 'C1'].Merge(True); // formatando o titulo ExcelWorksheet1.Range['A1', 'C1'].Font.Bold := True; ExcelWorksheet1.Range['A1', 'C1'].Font.Size := 16; ExcelWorksheet1.Range['A1', 'C1'].Font.Color := RGB(255,0,0); ExcelWorksheet1.Range['A1', 'C1'].HorizontalAlignment := xlCenter; ExcelWorksheet1.Range['A1', 'C1'].VerticalAlignment := xlCenter; // colocando os nomes dos campos na segunda linha ExcelWorksheet1.Range['A2', 'A2'].Value2 := 'Campo1'; ExcelWorksheet1.Range['B2', 'B2'].Value2 := 'Campo2'; ExcelWorksheet1.Range['C2', 'C2'].Value2 := 'Campo3'; ExcelWorksheet1.Range['A2', 'C2'].Font.Bold := True; ExcelWorksheet1.Range['A2', 'C2'].Font.Color := RGB(0,0,255); ExcelWorksheet1.Range['A2', 'C2'].HorizontalAlignment := xlCenter; ExcelWorksheet1.Range['A2', 'C2'].VerticalAlignment := xlCenter; // colocando os valores ExcelWorksheet1.Range['A3', 'A3'].Value2 := 'Valor1'; ExcelWorksheet1.Range['B3', 'B3'].Value2 := 'Valor2'; ExcelWorksheet1.Range['C3', 'C3'].Value2 := 'Valor3'; ExcelWorksheet1.Range['A4', 'A4'].Value2 := 'Valor4'; ExcelWorksheet1.Range['B4', 'B4'].Value2 := 'Valor5'; ExcelWorksheet1.Range['C4', 'C4'].Value2 := 'Valor6'; // colocando borda nas celulas dos valores ExcelWorksheet1.Range['A3', 'C4'].Borders.Weight := xlThin; ExcelWorksheet1.Range['A3', 'C4'].HorizontalAlignment := xlCenter; ExcelWorksheet1.Range['A3', 'C4'].VerticalAlignment := xlCenter; { formatando a pagina de impressão } // ajusta o tamanho das colunas ExcelWorksheet1.Cells.EntireColumn.AutoFit; // define borda de impressao com cerca de 1cm ExcelWorksheet1.PageSetup.BottomMargin := 30; ExcelWorksheet1.PageSetup.LeftMargin := 30; ExcelWorksheet1.PageSetup.RightMargin := 30; ExcelWorksheet1.PageSetup.TopMargin := 30; // deixa a planilha no centro da pagina horizontalmente ExcelWorksheet1.PageSetup.CenterHorizontally := True; // imprime o numero da pagina no rodapé // '&P' e o codigo para numero de pagina ExcelWorksheet1.PageSetup.CenterFooter := '&P'; // Exibe o programa do Excel com a planilha criada ExcelApplication1.Visible[LCID] := True; end; end.
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:
// abre o PrintPreview (use depois do "ExcelApplication1.Visible[LCID] := True;") ExcelWorksheet1.PrintPreview; // folha na horizontal ExcelWorksheet1.PageSetup.Orientation := xlLandscape; // impressao em preto e branco ExcelWorksheet1.PageSetup.BlackAndWhite := True; // Salva a planilha 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
13 Comentário para “Criando planilhas do Excel com o Delphi”
Deixe um comentário |



Gostei, do artigo.
Mas gostaria de aprofundar mais, onde voce consegui estes dados, e onde posso procurar mais informações, sobre excel e delphi.
Obrigado
Não tenho o excel instalado no computador. Isso pode gerar um erro de CLASSE NÃO REGISTRADA.
Gostei bastante das informações nas instruções acima, mas você sabe com inserir uma imagem no excel (bmp ou jpeg)?
Meu muito boa essas dicas suas me deu uma duvida como faço para eu definir o tipo de celula por ex. queria definir minha celula como numero opu especial e como definir as bordas de maneira diferente que foi colocado no seu blog se souber algo me manda um e-mail..
Achei muito bom seu artigo
Poderia me tiara uma dúvida?
Por que seu eu colocar isso dentro de uma Thread não funciona?
Abraço!
E para abrir um já existente? Como fica?
Abraço!
Gostaria de saber se é necessário ter o excel instalado no pc para usar as ferramentas apresentadas nesse artigo.
Muito bom…parabéns…me ajudou e muito…era isso que eu precisava..agora é so se aprofundar mais..
Obrigado..pela ajuda.
Tem como, ao final da criação do arquivo de excel, o programa em delphi matar o processo do excel? Porque continua na memória e, às vezes, dá erro.
muito legal esse procedimento….não sabia que dava!
Por favor como adicionar uma 4 aba no excel usando o delphi?
Olá!!
Muito bom o Post!!
Gostaria de saber se há como atribuir uma imagem à determinada Célula.
Obrigada desde já
att,
Jéssica Almeida
oi, eu di novo!!
Como alterar largura das colunas e como alterar o formato de uma célula para ‘moeda’, com 2 casas decimais e sem símbolo de moeda ?
Brigadaaaaa
att
Jéssica Almeida