GARANTIR DESCONTO

Fórum Exportando para o Excel #272834

17/03/2005

0

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

Responder

Posts

17/03/2005

Motta

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.


Responder

Gostei + 0

17/03/2005

Otto

qualquer coisa, olha so um exemplo ja prontinho e bem simples:

:arrow: http://www.clubedelphi.net/aplicativos/TOP_exportando_excell.asp


Responder

Gostei + 0

18/03/2005

Salupe

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar