Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FÁBIO ANALISTA

[Resolvido] (Delphi) Como importar e exportar arquivos Excel

Recommended Posts

Pessoal não estou conseguindo um modo para importar e exportar arquivos, tem pessoas que usam um componente chamado exportexcel se alguém suber como pegar esse componente e utiliza-lo.

Se não souberem do componente peço outra solução por favor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu caro marcio.theis estive procurando você deu uma resposta para o Jerfs.

com o seguinte código:

 

procedure TForm1.BitBtn1Click(Sender: TObject);

var

excel: Variant;

x: Integer;

arquivo: string;

begin

arquivo:='c:\Teste.xls';

Excel:=CreateOleObject('Excel.Application');

Excel.Visible:=False;

Excel.DisplayAlerts:=False;

Excel.Workbooks.Add;

Excel.Workbooks[1].Sheets.Add;

Excel.Workbooks[1].WorkSheets[1].Name:='Teste';

Excel.Workbooks[1].WorkSheets[1].DisplayPageBreaks:=False;

Excel.Columns.AutoFit;

for x:=1 to 10 do

begin

excel.WorkBooks[1].Sheets[1].Cells[x,1]:='Teste linha ' + IntToStr(x) + ' X coluna 1';

excel.WorkBooks[1].Sheets[1].Cells[x,2]:='Teste linha ' + IntToStr(x) + ' X coluna 2';

excel.WorkBooks[1].Sheets[1].Cells[x,3]:='Teste linha ' + IntToStr(x) + ' X coluna 3';

end;

Excel.WorkBooks[1].Sheets[1].SaveAs(arquivo);

Excel.WorkBooks.Open(arquivo);

Excel.Visible:=True;

end;

 

Mas como que ligo minha Query a este código poderia me dar um exemplo.

Esse for não deveria ser de 1 até quantidade de linha da Query ?

Como eu faço para colocar meu recordset que voltou do Query para o Excel, ligar o Execel a Query, faltou em seu código.

Poderia me dar um exemplo do código completo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não teria como "ligar" a sua query, e sim você coloca onde deseja que ela preencha algo, digamos que tenha uma query chamada "qryTeste", exemplo:

 

procedure TForm1.BitBtn1Click(Sender: TObject);
var
	excel: Variant;
	x: Integer;
	arquivo: string;
begin
arquivo:='c:\Teste.xls';
Excel:=CreateOleObject('Excel.Application');
Excel.Visible:=False;
Excel.DisplayAlerts:=False;
Excel.Workbooks.Add;
Excel.Workbooks[1].Sheets.Add;
Excel.Workbooks[1].WorkSheets[1].Name:='Teste';
Excel.Workbooks[1].WorkSheets[1].DisplayPageBreaks:=False;
Excel.Columns.AutoFit;

qryTeste.First;
while (not qryTeste.Eof) do
	begin
	excel.WorkBooks[1].Sheets[1].Cells[x,1]:=qryTeste.FieldByName('CAMPO').AsString;
	qryTeste.Next;
	end;

Excel.WorkBooks[1].Sheets[1].SaveAs(arquivo);
Excel.WorkBooks.Open(arquivo);
Excel.Visible:=True;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não teria como "ligar" a sua query, e sim você coloca onde deseja que ela preencha algo, digamos que tenha uma query chamada "qryTeste", exemplo:

 

procedure TForm1.BitBtn1Click(Sender: TObject);
var
	excel: Variant;
	x: Integer;
	arquivo: string;
begin
arquivo:='c:\Teste.xls';
Excel:=CreateOleObject('Excel.Application');
Excel.Visible:=False;
Excel.DisplayAlerts:=False;
Excel.Workbooks.Add;
Excel.Workbooks[1].Sheets.Add;
Excel.Workbooks[1].WorkSheets[1].Name:='Teste';
Excel.Workbooks[1].WorkSheets[1].DisplayPageBreaks:=False;
Excel.Columns.AutoFit;

qryTeste.First;
while (not qryTeste.Eof) do
	begin
	excel.WorkBooks[1].Sheets[1].Cells[x,1]:=qryTeste.FieldByName('CAMPO').AsString;
	qryTeste.Next;
	end;

Excel.WorkBooks[1].Sheets[1].SaveAs(arquivo);
Excel.WorkBooks.Open(arquivo);
Excel.Visible:=True;
end;

Está dando erro no CreateOleObject dizendo que não foi declarado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora ele está parando na linha:

 

excel.WorkBooks[1].Sheets[1].Cells[x,1]:=DataModuleUsuario.ADOQueryUsuarios.Fiel

dByName('login').AsString;

 

Não está reconhecendo o login como sendo o parâmetro da query e esse login está no parâmetro:

MENSAGEM DE ERRO : EDatabaseError com a mensagem ADPQuery Field 'login' not found.

 

Pela lógica esse parâmetro devia ser reconhecido pois o meu query está retornando certo com o parâmentro (ou seja está exibindo no dbgrig conectado ao ADOQuery com a mesma query) fiz o seguinte teste também dei um ShowMessage no SQL da query e está voltando com o parâmetro também -> select * from tb_usuarios where desc_login Like :login

 

Será o que pode ser ? :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parâmetro é uma coisa completamente de campo, no FieldByName você vai buscar o valor de uma campo usando o nome do mesmo, ou seja, o campo login não existe para a query, pelo visto o que existe é o campo DESC_LOGIN e é este que deve de ser informado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcio deu um outro erro de OLE. Agradeço muito por suaajuda, mas

decidi usar uma outra maneira de exportar os dados para excel que seria a seguinte: a exportação ocorreu com sucesso.

 

var linha, coluna : integer;

planilha : variant;

valorcampo : string;

begin

 

planilha:= CreateoleObject('Excel.Application');

planilha.WorkBooks.add(1);

planilha.caption := 'Exportando dados do dbGrid para o Excel';

planilha.visible := true;

 

DataModuleUsuario.ADOQueryUsuarios.First;

for linha := 0 to DataModuleUsuario.ADOQueryUsuarios.RecordCount - 1 do

begin

for coluna := 1 to DataModuleUsuario.ADOQueryUsuarios.FieldCount do

begin

valorcampo := DataModuleUsuario.ADOQueryUsuarios.Fields[coluna - 1].AsString;

planilha.cells[linha + 2,coluna] := valorCampo;

end;

DataModuleUsuario.ADOQueryUsuarios.Next;

end;

for coluna := 1 to DataModuleUsuario.ADOQueryUsuarios.FieldCount do

begin

valorcampo := DataModuleUsuario.ADOQueryUsuarios.Fields[coluna - 1].DisplayLabel;

planilha.cells[1,coluna] := valorcampo;

end;

planilha.columns.Autofit;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.