Fórum Exportando para o Excel #272834
17/03/2005
0
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
Curtir tópico
+ 0Posts
17/03/2005
Motta
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
17/03/2005
Otto
:arrow: http://www.clubedelphi.net/aplicativos/TOP_exportando_excell.asp
Gostei + 0
18/03/2005
Salupe
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
Clique aqui para fazer login e interagir na Comunidade :)