News & Events
Exportando dados do DBGrid para Excel
- 17 de maio de 2007
- Posted by: Adriano Santos
- Category: dbgrid delphi delphi2007 excel exportação
Difficulty level not set for this Post
Tweet
Olá pessoal,
Esta dica foi enviada pelo colega Walter Chagas e mostra como exportar dados de um DBGrid para o Excel.
procedure TForm1.ExportDBGrid(toExcel: Boolean);
var
bm: TBookmark;
col, row: Integer;
sline: String;
mem: TMemo;
ExcelApp: Variant;
begin
Screen.Cursor := crHourglass;
DBGrid1.DataSource.DataSet.DisableControls;
bm := DBGrid1.DataSource.DataSet.GetBookmark;
DBGrid1.DataSource.DataSet.First;
// create the Excel object
if toExcel then
begin
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.WorkBooks.Add(xlWBatWorkSheet);
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Grid Data';
end;
// First we send the data to a memo
// works faster than doing it directly to Excel
mem := TMemo.Create(nil);
mem.Visible := false;
mem.Parent := Form1;
mem.Clear;
sline := '';
// add the info for the column names
for col := 0 to DBGrid1.FieldCount - 1 do
sline := sline + DBGrid1.Fields[col].DisplayLabel + #9;
mem.Lines.Add(sline);
// get the data into the memo
for row := 0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
sline := '';
for col := 0 to DBGrid1.FieldCount-1 do
sline := sline + DBGrid1.Fields[col].AsString + #9;
mem.Lines.Add(sline);
DBGrid1.DataSource.DataSet.Next;
end;
// we copy the data to the clipboard
mem.SelectAll;
mem.CopyToClipboard;
// if needed, send it to Excel
// if not, we already have it in the clipboard
if toExcel then
begin
ExcelApp.Workbooks[1].WorkSheets['Grid Data'].Paste;
ExcelApp.Visible := true;
end;
FreeAndNil(mem);
FreeAndNil(ExcelApp);
fvProjPrd.DBGrid1.DataSource.DataSet.GotoBookmark(bm);
fvProjPrd.DBGrid1.DataSource.DataSet.FreeBookmark(bm);
fvProjPrd.DBGrid1.DataSource.DataSet.EnableControls;
Screen.Cursor := crDefault;
end;
Siga autor @asrsantos no Twitter agora e fique por dentro de todas as atualizações do blog.
Exemplo de uso:
procedure Form1.Button1Click(Sender: TObject);
begin
ExportDBGrid(True);
end;
Sobre o autor:
Walter Alves Chagas Junior
Projeto e desenvolvimento de sistemas
Telemont Engenharia de telecomunicações S/A
Belo Horizonte - MG - Brasil
Parabéns, sua inscrição no Feed RSS foi aceita. Leia em primeira mão todas as notícias do blog.
Siga @tdevrocks no Twitter agora e fique por dentro de todas as atualizações do blog.
Siga também o autor @asrsantos
Author: Adriano Santos
Adriano Santos é especialista em linguagens de desenvolvimento, Embarcadero MVP, possui +1000 artigos e vídeo-aulas publicadas em revistas e websites especializados, ex-editor chefe das revistas ClubeDelphi e WebMobile. Atualmente Diretor de Operações na startup GET IT! Technology e Consultor Senior na Embarcadero do Brasil.
No meu projeto, a função gera o aquivo em excel, em compesação retorna o seguinte eroo
Access Violation at address 004034EE in module projecto.exe
O código está excelente, claro que faltaram muitas explicações sobre como colocá-lo em prática.
É necessário declarar no uses comobj, db, OleServer, ExcelXP, Variants.
O fim, onde está escrito fvProjPrd, trata-se da janela onde ele colocou o banco e outras coisas… para um programa teste, coloquem tudo no mesmo form, renomeem fvProjPrd. para form1. (ou o nome que vocês colocaram no form).
Qualquer dúvida quanto a esse código podem entrar em contato comigo. teofilo.barbosa@gmail.com
Access Violation at address 004034EE
Para evitar esse erro basta comentar a linha
//FreeAndNil(ExcelApp);
Abraço.
(Teófilo Barbosa)
Conhecia este metodo, porem necessito de algo que não precise do excel instalado no pc.
Grato Rafael Elias
ti@onotec.com.br
Rafael Elias, use a dica do Torry.
Adriano,
Sua dica com mais algumas que achei na internet já me ajudaram a encontrar a solução para a geração de uma planilha Excel a partir de um programa Delphi (v 6).
Mas ainda preciso de coisas um pouco mais avançadas como, por exemplo, gerar um cabeçalho fixo para todas as páginas.
Tentei encontrar dicas dos comandos que podem ser utilizados depois de um .workbooks….. e não acho em lugar algum.
Qualquer ajuda será benvinda:
Lineu Carneiro Saraiva
lineu@lncs.com.br
Esta dando um erro:
External Exception C0000235
o que pode ser?