Exportando para o Excel

Delphi

17/03/2005

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


Salupe

Salupe

Curtidas 0

Respostas

Motta

Motta

17/03/2005

exemplo bem simples

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

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


GOSTEI 0
Salupe

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


GOSTEI 0
POSTAR