Exportando para o Excel
Oi, Uso Delphi 6 e Firebird 1.5
Estou tentando mandar dados do meu bd para o excel, e para isso peguei uma rotina indica num programa de dicas de delphi. Só que ele dá erro na seguinte linha.
Excel := CreateOleObject(´Excel.Application´);
Excel foi declarado como variant e ele indica que o createoleobject nao foi declarado.
O que eu tenho que fazer, declarar alguma unit, componente,... Não sei como declarar, e no programa não indica nada.
Agradeço antecipadamente qualquer ajuda.
Sandro
Estou tentando mandar dados do meu bd para o excel, e para isso peguei uma rotina indica num programa de dicas de delphi. Só que ele dá erro na seguinte linha.
Excel := CreateOleObject(´Excel.Application´);
Excel foi declarado como variant e ele indica que o createoleobject nao foi declarado.
O que eu tenho que fazer, declarar alguma unit, componente,... Não sei como declarar, e no programa não indica nada.
Agradeço antecipadamente qualquer ajuda.
Sandro
Salupe
Curtidas 0
Respostas
Motta
17/03/2005
exemplo bem simples
Só tive problemas com esta rotina quando o excel gerado é meio grande, para dataset pequenos funciona legal.
Não formata a planilha, mas dá para fazer tb.
unit DataSetToExcel; interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, ExtCtrls, StdCtrls, ComCtrls, Db, DBTables, DBCtrls, Buttons, ComObj, Filectrl,OleServer, Excel97; function DataSetToExcelFile(ds: TDataSet;ExcelFile: String):Boolean; implementation // Generate a Excel File (.xls) with the DataSource.DataSet // property of the grid. // Format the TFields of the DataSet to show in the Excel. function DataSetToExcelFile(ds: TDataSet;ExcelFile: String):Boolean; var bResult: Boolean; SavePlace: TBookmark; i,eline: Integer; Excel: TExcelApplication; r : Excel97.Range; w : _WorkBook; celula : string; begin bResult:= False; // If dataset is assigned and active runs Excel if Assigned(ds) then begin if ds.Active then begin ds.DisableControls; try Excel:= TExcelApplication.Create(Application); Excel.Connect; Excel.Visible[0] := False; w := Excel.WorkBooks.Add(null,0); r := Excel.ActiveCell; // Save grid Position SavePlace:= ds.GetBookmark; ds.First; // Dataset Header eline:= 1; // First Line of Sheet if not (ds.Eof) then begin for i:=0 to (ds.FieldCount-1) do begin r.Value := ds.Fields[i].DisplayLabel; r := r.Next; end; end; while not ds.Eof do // Detail begin Inc(eline); // Add 1 to the line of Sheet celula := ´A´ + IntToStr(eline); r := Excel.Range[celula,celula]; for i:=0 to (ds.FieldCount-1) do begin r.Value := ds.Fields[i].Value; r := r.Next; end; ds.Next; end; // Set saved grid position ds.GotoBookmark(SavePlace); // Save the file w.SaveAs(ExcelFile,null,null,null,null,null,ACCESS_OBJECT_GUID,null,null,null,null,0); w.Close(null,null,null,0); Excel.Disconnect; Excel.Quit; Excel.Free; bResult:= True; except on e:exception do begin showmessage(e.message); ds.EnableControls; bResult:= False; end; end; end; end; ds.EnableControls; Result := bResult; end; end.
Só tive problemas com esta rotina quando o excel gerado é meio grande, para dataset pequenos funciona legal.
Não formata a planilha, mas dá para fazer tb.
GOSTEI 0
Otto
17/03/2005
qualquer coisa, olha so um exemplo ja prontinho e bem simples:
:arrow: http://www.clubedelphi.net/aplicativos/TOP_exportando_excell.asp
:arrow: http://www.clubedelphi.net/aplicativos/TOP_exportando_excell.asp
GOSTEI 0
Salupe
17/03/2005
Otto consegui adaptar o teu exemplo pro meu sistema, obrigado.
Só que ele não faz a gravação no padrão do excel que eu utilizo, ele faz a gravação como se estivesse gravando textos com separação por parágrafos. Mas se eu salvar com outro nome ou em local diferente do escolhido pelo sistema ele grava corretamente.
Como eu posso fazer com que o excel abra o arquivo com o padrão dele, para que o usuário não precise lembrar que tem que salvar com o padrão do excel.
Uso o Office XP, e aliás tem como eu fazer a gravação de acordo com o excel que o usuário tiver na máquina no momento que estiver criando o arquivo.
Antecipadamente agradeço qualquer ajuda.
Sandro
Só que ele não faz a gravação no padrão do excel que eu utilizo, ele faz a gravação como se estivesse gravando textos com separação por parágrafos. Mas se eu salvar com outro nome ou em local diferente do escolhido pelo sistema ele grava corretamente.
Como eu posso fazer com que o excel abra o arquivo com o padrão dele, para que o usuário não precise lembrar que tem que salvar com o padrão do excel.
Uso o Office XP, e aliás tem como eu fazer a gravação de acordo com o excel que o usuário tiver na máquina no momento que estiver criando o arquivo.
Antecipadamente agradeço qualquer ajuda.
Sandro
GOSTEI 0