Exportar dados de uma ADOQuery para o excel.
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.
Grato a quem puder me ajudar.
Rik3500
Curtidas 0
Respostas
Rômulo Barros
11/02/2004
Qual a versão do teu office?????
GOSTEI 0
Rik3500
11/02/2004
Office XP Service Pack2
GOSTEI 0
Rômulo Barros
11/02/2004
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.
[size=18:fd1d60b847][color=red:fd1d60b847]OBS: Não testei o código. Se der errado, avise-me :twisted: :twisted: [/color:fd1d60b847][/size:fd1d60b847]
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]
GOSTEI 0
Rik3500
11/02/2004
Muito obrigado, funcionol perfeitamente.
Grato.
Ricardo.
Grato.
Ricardo.
GOSTEI 0
Rômulo Barros
11/02/2004
Beleza.... Uma mão lava a outra..... :twisted: :evil:
GOSTEI 0
Henry Lima
11/02/2004
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...
Valeu galera...
GOSTEI 0
Rik3500
11/02/2004
Mas como é que se usa este componente?
Grato.
Ricardo.
Grato.
Ricardo.
GOSTEI 0
Lincoln
11/02/2004
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;
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;
GOSTEI 0
Bueno
11/02/2004
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;
GOSTEI 0
Bueno
11/02/2004
ah, e não se esqueça de declarar as variáveis:
Espero ter ajudado
flw!
coluna, linha: integer; excel: variant; valor: string;
Espero ter ajudado
flw!
GOSTEI 0