Fórum Exportar para Excel campos desejados #448030

07/07/2013

0

Bom dia!

tenho uma aplicação de cadastro em Delph com ADOConnection e ADOQuery BD Access.

alguem pode ajudar a criar um form para exportação do BD para o Excel e nessa exportação, definir os campos a serem exportados "SOMENTE NO MOMENTO DA EXPORTAÇÃO", pois num momento eu preciso exportar um campo, em outro momento outro campo e assim vai....

pois com os códigos abaixo os campos já estão pre-definidos e não é assim que preciso:

var
PLANILHA : Variant;
Linha : Integer;
Begin
inherited;
// qy_ocorre -----> minha query

ADOQuery1.Filtered := False;
Linha :=2;
PLANILHA := CreateOleObject('Excel.Application');
PLANILHA.Caption := 'MINHA PLANILHA';
PLANILHA.Visible := False;
PLANILHA.WorkBooks.add(1);

// TITULO DAS COLUNAS

PLANILHA.Cells[1,1] := 'NOME';
PLANILHA.Cells[1,2] := 'RA';
PLANILHA.Cells[1,3] := 'DN';
PLANILHA.Cells[1,4] := 'NATURALIDADE';
PLANILHA.Cells[1,5] := 'CPF';
PLANILHA.Cells[1,6] := 'CSM';


// Formatando o Cabeçalho
PLANILHA.Range['A1','F1'].font.name := 'Verdana'; // Fonte
PLANILHA.Range['A1','F1'].font.size := 12; // Tamanho da Fonte
PLANILHA.Range['A1','F1'].font.bold := true; // Negrito
PLANILHA.Range['A1','F1'].font.italic := true; // Italico
PLANILHA.Range['A1','F1'].font.color := clBlack; // Cor da Fonte
PLANILHA.Range['A1','F1'].Interior.Color := $00ffcf9c; // Cor da Célula


PLANILHA.Cells[1,1].Font.Bold := true;
PLANILHA.Cells[1,2].Font.Bold := true;
PLANILHA.Cells[1,3].Font.Bold := true;
PLANILHA.Cells[1,4].Font.Bold := true;
PLANILHA.Cells[1,5].Font.Bold := true;
PLANILHA.Cells[1,6].Font.Bold := true;

PLANILHA.Cells[1,1].HorizontalAlignment := 3;
PLANILHA.Cells[1,2].HorizontalAlignment := 3;
PLANILHA.Cells[1,3].HorizontalAlignment := 3;
PLANILHA.Cells[1,4].HorizontalAlignment := 3;
PLANILHA.Cells[1,5].HorizontalAlignment := 3;
PLANILHA.Cells[1,6].HorizontalAlignment := 3;



PLANILHA.Range['A1','F50'].Borders.LineStyle := 1;
PLANILHA.Range['A1','F50'].Borders.Weight := 2;
PLANILHA.Range['A1','F50'].Borders.ColorIndex := 1;



ADOQuery1.DisableControls;

// PRRENCHIMENTO DAS CÉLULAS COM OS VALORES DOS CAMPOS DA TABELA
Try
While not ADOQuery1.Eof do
Begin
PLANILHA.Cells[Linha,1]:= ADOQuery1NOME.Value;
PLANILHA.Cells[linha,2] := ADOQuery1RA.Value;
PLANILHA.Cells[Linha,3] := ADOQuery1DN.Value;
PLANILHA.Cells[Linha,4] := ADOQuery1NATURALIDADE.Value;
PLANILHA.Cells[Linha,5] := ADOQuery1CPF.Value;
PLANILHA.Cells[Linha,6] := ADOQuery1CSM.Value;

Linha := Linha + 1;
ADOQuery1.Next;
End;
PLANILHA.Columns.AutoFit;

// caso queira proteger a planilha com senha

// PLANILHA.WorkBooks[1].Sheets[1].Protect(DrawingObjects := True, Contents:=true,
// Scenarios := true, Password := '1234');

// IF SaveDialog1.Execute then // colocar um compnente SaveDialog no form
// PLANILHA.WorkBooks[1].SaveAs(SaveDialog1.FileName);

PLANILHA.Visible := True;
Finally
ADOQuery1.EnableControls;
PLANILHA := Unassigned;
end; // TRY

End;
Paulo

Paulo

Responder

Posts

07/07/2013

Landerson Santos

Jogue os fields num Memo por exemplo e a cada vez que for efetuar sua rotina de exportação verifica se o nome do field exportado está dentro do memo.

Se sim, exporte, se não vai pro próximo registro da exportação.
Responder

Gostei + 0

07/07/2013

Paulo

Jogue os fields num Memo por exemplo e a cada vez que for efetuar sua rotina de exportação verifica se o nome do field exportado está dentro do memo.

Se sim, exporte, se não vai pro próximo registro da exportação.


Sou iniciante, estou com dificuldades. Pode dar mais algumas dicas?
Responder

Gostei + 0

08/07/2013

Paulo

Jogue os fields num Memo por exemplo e a cada vez que for efetuar sua rotina de exportação verifica se o nome do field exportado está dentro do memo.

Se sim, exporte, se não vai pro próximo registro da exportação.


Sou iniciante, estou com dificuldades. Pode dar mais algumas dicas?



Boa tarde! ainda estou precisando de ajuda.
Responder

Gostei + 0

08/07/2013

Landerson Santos

Paulo Sergio boa tarde.

Primeiro passo seria você listar os campo do seu ADOQUERY...
for I := 0 to ADOQuery1.FieldCount -1 do
begin
  Memo1.Lines.Add(ADOQuery1.Fields[i].FieldName);
end;


Assim você jogou os campos no MEMO... agora vc vai no memo e seleciona os campos que vc deseja exportar e faz um rotina para verificar se o nome do campo selecionado é igual ao campo que está sendo exportado.

A ideia seria essa.
Responder

Gostei + 0

08/07/2013

Landerson Santos

Paulo Sergio boa tarde.

Primeiro passo seria você listar os campo do seu ADOQUERY...
for I := 0 to ADOQuery1.FieldCount -1 do
begin
  Memo1.Lines.Add(ADOQuery1.Fields[i].FieldName);
end;


Assim você jogou os campos no MEMO... agora vc vai no memo e seleciona os campos que vc deseja exportar e faz um rotina para verificar se o nome do campo selecionado é igual ao campo que está sendo exportado.

A ideia seria essa.


Outra alternativa seria no Clique do Título da Coluna no BDGRID...

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
  Memo1.Lines.Add(Column.Field.FieldName);
end;
Responder

Gostei + 0

08/07/2013

Paulo

Paulo Sergio boa tarde.

Primeiro passo seria você listar os campo do seu ADOQUERY...
for I := 0 to ADOQuery1.FieldCount -1 do
begin
  Memo1.Lines.Add(ADOQuery1.Fields[i].FieldName);
end;


Assim você jogou os campos no MEMO... agora vc vai no memo e seleciona os campos que vc deseja exportar e faz um rotina para verificar se o nome do campo selecionado é igual ao campo que está sendo exportado.

A ideia seria essa.


Outra alternativa seria no Clique do Título da Coluna no BDGRID...

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
  Memo1.Lines.Add(Column.Field.FieldName);
end;


Tem como vc adaptar essa rotina no meu código acima?
Responder

Gostei + 0

08/07/2013

Paulo

Paulo Sergio boa tarde.

Primeiro passo seria você listar os campo do seu ADOQUERY...
for I := 0 to ADOQuery1.FieldCount -1 do
begin
  Memo1.Lines.Add(ADOQuery1.Fields[i].FieldName);
end;


Assim você jogou os campos no MEMO... agora vc vai no memo e seleciona os campos que vc deseja exportar e faz um rotina para verificar se o nome do campo selecionado é igual ao campo que está sendo exportado.

A ideia seria essa.


Outra alternativa seria no Clique do Título da Coluna no BDGRID...

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
  Memo1.Lines.Add(Column.Field.FieldName);
end;


Tem como vc adaptar essa rotina no meu código acima?
Responder

Gostei + 0

08/07/2013

Paulo

Paulo Sergio boa tarde.

Primeiro passo seria você listar os campo do seu ADOQUERY...
for I := 0 to ADOQuery1.FieldCount -1 do
begin
  Memo1.Lines.Add(ADOQuery1.Fields[i].FieldName);
end;


Assim você jogou os campos no MEMO... agora vc vai no memo e seleciona os campos que vc deseja exportar e faz um rotina para verificar se o nome do campo selecionado é igual ao campo que está sendo exportado.

A ideia seria essa.


Outra alternativa seria no Clique do Título da Coluna no BDGRID...

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
  Memo1.Lines.Add(Column.Field.FieldName);
end;


Tem como vc adaptar essa rotina no meu código acima?
Responder

Gostei + 0

08/07/2013

Landerson Santos

Sua rotina de preenchimento da Celula...


While not ADOQuery1.Eof do
Begin
//Aqui você faz verificação se o Campo Atual é um dos campos selecionados
// e na listagem de campos abaixo você só vai fazer a exportação dos campos que atenderem ao critério

PLANILHA.Cells[Linha,1]:= ADOQuery1NOME.Value;
PLANILHA.Cells[linha,2] := ADOQuery1RA.Value;
PLANILHA.Cells[Linha,3] := ADOQuery1DN.Value;
PLANILHA.Cells[Linha,4] := ADOQuery1NATURALIDADE.Value;
PLANILHA.Cells[Linha,5] := ADOQuery1CPF.Value;
PLANILHA.Cells[Linha,6] := ADOQuery1CSM.Value;

Linha := Linha + 1;
ADOQuery1.Next;
End;


Amigão... agora é colocar sua cabeça para funcionar aí...
Até
Responder

Gostei + 0

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

Aceitar