Exportação e Importação de Dados para EXCEL - Caixa Nomes

15/09/2004

Olá pessoal. Bom antes de tudo já pesquisei todos os tópicos referente a esse assunto no fórum ok.

Bom vamos lá, fiz a exportação de uma tabela de meu banco de dados para uma planilha excel. Ao criar essa planilha todos meu dados estão ok. Quando vou salvar precisaria de um comando para poder atribuir um alias ex(TABELAS) na caixa de nomes do excel. Isso na criação do documento ou seja na exportação. Esse problema aconteceu , quando gerei a tabela e salvei doc, quando vou importar, faço uma consulta sql no Excel ex: Select * From TABELAS , onde ele me retornaria todo o contéudo das celulas importando para meu banco dados atualizado. O problema e que quando e gerado a planilha na exportação não e criado esse Alias TABELAS na caixa de nomes do excel, o que seria necessário para que na minha importação possa pesquisar, isso ocasiona um erro. Lógicamente acontece isso pois não há nada na caixa de nomes do excel.

Precisaria de um comando que coloca um alias exe:TABELAS na caixa de nome selecionando tudo que enviei para a planilha do EXCEL.

Do contrário eu tenho que colocar manualmente, mas acreditando que meus usuários não tem dominio pleno disso, facilitaria se coloca-se automaticamente na criação.

Segue abaixo o codigo:

//modulo de exportação//
procedure TForm1.Button3Click(Sender: TObject);
begin
LimparStringGrid;
Gauge1.Progress := 0;

QR_EXEC.SQL.Clear;
QR_EXEC.SQL.Add(´Select CODIGO, NFANTASIA, INSC_EST´);
QR_EXEC.SQL.Add(´From TB_CLIENTE´);
QR_EXEC.SQL.Add(´Order by CODIGO´);
QR_EXEC.Open;

if not QR_EXEC.IsEmpty then
begin
Gauge1.MaxValue := QR_EXEC.RecordCount;
while not (QR_EXEC.Eof) do
begin
Gauge1.Progress := Gauge1.Progress + 1;
QR_EXEC.Next;
end;
if CheckBox1.Checked then
GerarExcel(QR_EXEC);//aqui a chamada da função
end;
end;

procedure TForm1.GerarExcel(Consulta: TQuery);
var
coluna, linha: integer;
excel: variant;
valor: string;
begin //Dados de Banco
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;

Consulta.First;
try
//Essa rotina cria os label da coluna
for coluna := 1 to Consulta.FieldCount do // eliminei a coluna 0 da relação do Excel
begin
valor := Consulta.Fields[coluna - 1].DisplayLabel;
excel.cells[1, coluna] := valor;
end;
//Essa rotina insere os dados na colunas
for linha := 0 to Consulta.RecordCount - 1 do
begin
for coluna := 1 to Consulta.FieldCount do // eliminei a coluna 0 da relação do Excel
begin
valor := Consulta.Fields[coluna - 1].AsString;
excel.cells[linha + 2, coluna] := valor;
end;
Consulta.Next;
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;
end;


//modulo de Importação//

procedure TForm1.Button2Click(Sender: TObject);
begin
LimparStringGrid;
Gauge1.Progress := 0;
ADOConnection1.Connected := true;
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add(´SELECT * FROM TABELA´);
SQL.Add(´Where CODIGO is not null´);
Open;

if (not ADOQuery1.IsEmpty) then
begin
Gauge1.MaxValue := ADOQuery1.RecordCount;
while not eof do
begin
StringGrid1.Cells[0, StringGrid1.RowCount - 1] := Fields[0].AsString;
StringGrid1.Cells[1, StringGrid1.RowCount - 1] := Fields[1].AsString;
StringGrid1.Cells[2, StringGrid1.RowCount - 1] := Fields[2].AsString;
StringGrid1.RowCount := StringGrid1.RowCount + 1;
Gauge1.Progress := Gauge1.Progress + 1;
next;
end;
StringGrid1.RowCount := StringGrid1.RowCount - 1;
end
else
Application.MessageBox(´Não há dados disponivel na planilha!´, ´Informação´, MB_OK + MB_ICONQUESTIOn);
end;
end;

Desde já agradeço pela atenção...


Luiscesarap