Cmo Fazer via Delphi um SaveAs no Excel?

Delphi

27/03/2004

Saudações

Estou desenvolvendo uma aplicação, que tem que exportar os dados para o excel, até ai tudo bem, porém em vez de fazer um save, gostaria de saber cmo faço pra fazer um saveAs.

[]´s Jardel


Jardelbelo

Jardelbelo

Curtidas 0

Respostas

Rômulo Barros

Rômulo Barros

27/03/2004

[url]http://delphiforum.icft.com.br/forum/viewtopic.php?t=35579&highlight=excel[/url]

Vc poderá ir na paleta Servers e dá uma olhadinha no help do delphi em relação aos componentes do excel...


GOSTEI 0
Alvaro Vieira

Alvaro Vieira

27/03/2004

Já existem muitas soluções por aí, mas resolvi juntar algumas delas para que a procura do pessoal ficasse mais fácil. Tomei como base o cód. em http://www.activedelphi.com.br/forum/viewtopic.php?p=692&sid=4f8514b1852b4ca152f24ad046ff1149
O que o código abaixo resolve:
-Não usa bde, faz uso do componente TDBF (http://tdbf.sourceforge.net/)
-Não abre janela com a pergunta para sobrepor o arquivo xls ao usar o comando excel.ActiveWorkbook.SaveAs
-Pode ser adaptado para gerar uma tabela XLS a partir de qualquer outra tabela.
Abaixo o código único e completo, basta salva-lo como DBFToExcel.dpr.


program DBFToExcel;

uses
  Messages, SysUtils, Variants, Dialogs, ComObj, dbf;

procedure GerarExcel(Consulta: TDbf; cPath: string);
var
  coluna, linha: integer;
  excel: variant;
  valor: string;
begin
  try
    excel := CreateOleObject(Excel.Application);
    excel.Workbooks.add(1);
  except
    ShowMessage(Erro. Versão do Ms-Excel Incompatível);
    Exit;
  end;

  excel.visible := false;
  Consulta.First;
  try
    for linha := 0 to Consulta.RecordCount - 1 do
      begin
        for coluna := 1 to Consulta.FieldCount do
          begin
            valor := Consulta.Fields[coluna - 1].AsString;
            excel.cells[linha + 2, coluna] := valor;
          end;
        Consulta.Next;
      end;
    for coluna := 1 to Consulta.FieldCount do
      begin
        valor := Consulta.Fields[coluna - 1].DisplayLabel;
        excel.cells[1, coluna] := valor;
      end;

    excel.columns.AutoFit;
    excel.DisplayAlerts := false;     //Evita pedir a confirmação de sobreposição
    //excel.ActiveWorkbook.SaveAs(cPath+Invoice.xls, xlnormal, , , False, false);
    excel.ActiveWorkbook.SaveAs(cPath+Invoice.xls);

    excel.Quit;
    excel := unassigned;
  except
    excel.WorkBooks.Disconnect; //desconecta sua aplicação do documento aberto no excel.
    excel.Application.Disconnect; //desconecta sua aplicação do Excel

    ShowMessage(Aconteceu um erro desconhecido durante a conversão da tabela para o Ms-Excel);
  end;
end;


var
  i: word;
  cPath: string;
  Dbf1: TDBF;
begin
  if ParamCount > 0 then
    cPath := ParamStr(1)
  else
    cPath := ExtractFileDir( ParamStr(0) );

  if Copy(cPath,Length(cPath),1)  \ then
    cPath := cPath +\;

  try
    Dbf1 := TDBF.Create(nil);
    Dbf1.TableName := Invoice.dbf;
    Dbf1.FilePathFull := cPath;
    Dbf1.Active := true;
    Dbf1.First;

    GerarExcel(dbf1, cPath);
  except
    ShowMessage(Desculpe-me, mas tive problemas p/ abrir o arquivo +Dbf1.TableName+ e gerar Invoice.xls em +cPath);
  end;

  Dbf1.Active := false;

end. 


GOSTEI 0
POSTAR