Fórum Exportar dados de uma ADOQuery para o excel. #213273

11/02/2004

0

Segui os passos do exemplo deste site para exportar dados de um TDataSet para o Excel, mas não esta dando certo, as variáveis declarados no exemplo não batem com o funcionamento do Delphi 7.

Grato a quem puder me ajudar.


Rik3500

Rik3500

Responder

Posts

11/02/2004

Rômulo Barros

Qual a versão do teu office?????


Responder

Gostei + 0

11/02/2004

Rik3500

Office XP Service Pack2


Responder

Gostei + 0

11/02/2004

Rômulo Barros

Ok... Então, vamos lá: :P :P :P

Va na paleta de componentes ´Servers´ e adicione o seguints components:

1 - ExcelApplication (Representa a aplicação msexcel.exe)

Adicione um botão ao seu formulário e, quando vc clicar nele, os dados serão exportados para o Excel.

Evento OnClickDoBotão:
..
Var
  Cont : Integer;
begin
   Cont := 2;
   ExcelApplication1.Workbooks.Add(EmptyParam,0); // Cria um novo documento
   ExcelApplication1.Caption := ´Exportandp para o excel...´; /// Mesma função do caption de um form
   ExcelApplication1.Visible[0] := True;// Se false, o excel irá rodar em background....
   If(Not(Table.Active))Then
     Table.Active := True;
  ExcelApplication1.Range[´A1´,´A1´].Value2 := ´Codigo´; // A célula A1 receberá  a string "Codigo"
  ExcelApplication1.Range[´B1´,´B1´].Value2 := ´Nome´;// ...
  ExcelApplication1.Range[´C1´,´C1´].Value2 := ´Descrição´;// ...
  ExcelApplication1.Range[´A1´,´C1´].Font.Color := clRed; // As células A1,B1 e C1 terão fonte vermelha
  ExcelApplication1.Range[´A1´,´C1´].Interior.Color := clBlack; As células A1,B1 e C1 terão preenchimento preto
   Table.First;
   While(Not(Table.Eof))do
   Begin
      With(ExcelApplication1)Do
      Begin
         Range[´A´+IntToStr(Cont),´A´+IntToStr(Cont)].Value2 := Table.FieldByName(´cod´).AsString;
         Range[´B´+IntToStr(Cont),´B´+IntToStr(Cont)].Value2 := Table.FieldByName(´nome´).AsString;
         Range[´C´+IntToStr(Cont),´C´+IntToStr(Cont)].Value2 := Table.FieldByName(´ende´).AsString;
         Table.Next;
         Cont := Cont + 1;
      End;
   End;
   ExcelApplication1.ActiveWorkbook.SaveCopyAs(´C:\teste.xls´,0); // Salva uma copia do documento em C:\ com o nome de teste.xls


end;


[size=18:fd1d60b847][color=red:fd1d60b847]OBS: Não testei o código. Se der errado, avise-me :twisted: :twisted: [/color:fd1d60b847][/size:fd1d60b847]


Responder

Gostei + 0

12/02/2004

Rik3500

Muito obrigado, funcionol perfeitamente.

Grato.

Ricardo.


Responder

Gostei + 0

12/02/2004

Rômulo Barros

Beleza.... Uma mão lava a outra..... :twisted: :evil:


Responder

Gostei + 0

12/02/2004

Henry Lima

Existe ainda um componente na página www.delphibr.com.br que se chama ExcellExport que faz a exportação de dados de qualquer DataSet para o Excell, caso alguem tenha dificuldade para baixar o componente da página, entre em contato comigo que eu envio sem problemas...

Valeu galera...


Responder

Gostei + 0

12/02/2004

Rik3500

Mas como é que se usa este componente?

Grato.

Ricardo.


Responder

Gostei + 0

12/02/2004

Lincoln

procedure TFrmExportaExcel.SpeedButton1Click(Sender: TObject);
begin
Screen.Cursor := crSQLWait;
DM.QExportaExcel.Close;
With dm.QExportaExcel do
begin
SQL.Clear;
SQL.Add(´SELECT EQUIPAMENT, PART_NO, QTD´);
SQL.Add(´FROM PECAREC´);
SQL.Add(´WHERE EQUIPAMENT = ´+char(39)+DBLookupComboBox1.Text+char(39));
SQL.Add(´ORDER BY PART_NO´);
ExecSQL;
Open;
if DM.QExportaExcel.RecordCount = 0 then
begin
MessageDlg(´Favor verificar com o CPD, receita não encontrada´,mterror,[mbok],0);
end
else
begin
ExcelExport1.WorksheetName := DM.QExportaExcelEQUIPAMENT.Value;
// ExcelExport1.SaveAs(´c:\temp\´+DM.QExportaExcelEQUIPAMENT.Value+´.xls´,ffXLS);
ExcelExport1.ExportDataset;
ExcelExport1.Disconnect;
end;
end;
MessageDlg(´Processo Concluído.´,mtinformation,[mbok],0);
Screen.Cursor := crDefault;
end;


Responder

Gostei + 0

13/02/2004

Bueno

Kra, isso funcionou perfeitamente para mim:

if query.Active=true then //verifica se a query está aberta
begin
statusbar1.panels[0].text:=´Aguarde... Exportando dados para o Excel...´;
screen.cursor := crSQLWait;
cursor:=crSQLwait;
try
excel:=CreateOleObject(´Excel.Application´);
excel.Workbooks.add(1);
except
Application.MessageBox (´Versão do Ms-Excel´+
´Incompatível´,´Erro´,MB_OK+MB_ICONEXCLAMATION);
end;

query.First;
try
for linha:=0 to query.RecordCount-1 do
begin
for coluna:=1 to query.FieldCount do // eliminei a coluna 0 da relação do Excel
begin
valor:= query.Fields[coluna-1].AsString;
excel.cells [linha+2,coluna]:=valor;
end;
query.Next;
end;

for coluna:=1 to query.FieldCount do // eliminei a coluna 0 da relação do Excel
begin
valor:= query.Fields[coluna-1].DisplayLabel;
excel.cells[1,coluna]:=valor;
end;
excel.columns.AutoFit; // esta linha é para fazer com que o Excel dimencione as células adequadamente.
excel.visible:=true;
except
Application.MessageBox (´Aconteceu um erro desconhecido durante a conversão´+
´da tabela para o Ms-Excel´,´Erro´,MB_OK+MB_ICONEXCLAMATION);
end;



Responder

Gostei + 0

13/02/2004

Bueno

ah, e não se esqueça de declarar as variáveis:
coluna, linha: integer;
excel: variant;
valor: string;


Espero ter ajudado
flw!


Responder

Gostei + 0

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

Aceitar