Fórum Importar uma Planilha do Excel através do Delphi6 ! #158690
08/05/2003
0
Prezados Amigos,
Como posso importar uma planilha do MS-Excel através do Delphi para um determinado banco de dados ou até mesmo para um txt.
Veja bem só preciso saber como ler a planilha por dentro do delphi e buscar as informações que necessito!
atenciosamente,
Vinicius Pacca
Como posso importar uma planilha do MS-Excel através do Delphi para um determinado banco de dados ou até mesmo para um txt.
Veja bem só preciso saber como ler a planilha por dentro do delphi e buscar as informações que necessito!
atenciosamente,
Vinicius Pacca
Viniciuspacca
Curtir tópico
+ 0
Responder
Posts
09/05/2003
Skaarj
Bem ae vai a resposta.
Aqui eu fiz usando Interbase 6 e Ms-Excel 2000.. Mas deve ser meio geral.
Cria a variavel para conexao do Ole com o Excel e uma variavel para ordenar as linhas de cópia dos dados.
[b:0060ed02be]var
Excel: Variant;
Linha:integer;[/b:0060ed02be]
Inicialmente eu esvaziei a tabela que iria receber os dados [as vezes ela pode conter alguma coisa].
[b:0060ed02be]while not DtmPlugin_Controle.Produto.IsEmpty do
begin
DtmPlugin_Controle.Produto.Delete;
end;[/b:0060ed02be]
Então mandei criar a conexão com o Excel e abrir o arquivo que contém os dados[[u:0060ed02be]Excel.WorkBooks.Open(´c:\controle\Excel\produto.xls´);[/u:0060ed02be]]. No meu caso precisei enviar o foco para a linha 3 do Excel, pois as anteirores estavam ocupadas por dados irrelevantes ao BD em Interbase, era penas para amostragem em Excel
[b:0060ed02be]Excel := CreateOleObject(´Excel.Application´);
Excel.Visible :=True;
Excel.WorkBooks.Open(´c:\controle\Excel\produto.xls´);
linha:=3;[/b:0060ed02be]
Coloquei uma Label, chamada [i:0060ed02be]lblapoio[/i:0060ed02be] para veirificar quando não existem dados no arquivo em Excel [essa label esta com visible=true e pode ser substituida por uma variavel String]
[b:0060ed02be]lblapoio.caption:=VarToStr(Excel.WorkBooks[1].Sheets[1].Cells[3,1]);[/b:0060ed02be]
Agora sim, enquanto essa variavel não estiver vazia, ele vai dando um insert no banco de dados, e recebendo os valores do arquivo em Excel.
No final ele avança uma linha no Excel e seta os valores dessa linha na [i:0060ed02be]lblapoio[/i:0060ed02be][os dados que estiverem na coluna 1[A] dessa linha], além de, é claro, gravar os dados no banco de dados
[b:0060ed02be]While lblapoio.caption<>´´ do
Begin
DtmPlugin_Controle.Produto.Insert;
DtmPlugin_Controle.ProdutoNOME.Value:=Excel.WorkBooks[1].Sheets[1].Cells[linha,1];
DtmPlugin_Controle.Produto.Post;
Linha:=Linha+1;
lblapoio.caption:=Excel.WorkBooks[1].Sheets[1].Cells[linha,1];
end;[/b:0060ed02be]
Apresenta uma mensagem depois de tudo isso mostrando o fim da operação
[b:0060ed02be]Application.MessageBox(´Concluído´,´Controle [Excel]´,0);[/b:0060ed02be]
Segue um exemplo com componentes sem renomeacao [componentes DataAcess]
Aqui eu fiz usando Interbase 6 e Ms-Excel 2000.. Mas deve ser meio geral.
Cria a variavel para conexao do Ole com o Excel e uma variavel para ordenar as linhas de cópia dos dados.
[b:0060ed02be]var
Excel: Variant;
Linha:integer;[/b:0060ed02be]
Inicialmente eu esvaziei a tabela que iria receber os dados [as vezes ela pode conter alguma coisa].
[b:0060ed02be]while not DtmPlugin_Controle.Produto.IsEmpty do
begin
DtmPlugin_Controle.Produto.Delete;
end;[/b:0060ed02be]
Então mandei criar a conexão com o Excel e abrir o arquivo que contém os dados[[u:0060ed02be]Excel.WorkBooks.Open(´c:\controle\Excel\produto.xls´);[/u:0060ed02be]]. No meu caso precisei enviar o foco para a linha 3 do Excel, pois as anteirores estavam ocupadas por dados irrelevantes ao BD em Interbase, era penas para amostragem em Excel
[b:0060ed02be]Excel := CreateOleObject(´Excel.Application´);
Excel.Visible :=True;
Excel.WorkBooks.Open(´c:\controle\Excel\produto.xls´);
linha:=3;[/b:0060ed02be]
Coloquei uma Label, chamada [i:0060ed02be]lblapoio[/i:0060ed02be] para veirificar quando não existem dados no arquivo em Excel [essa label esta com visible=true e pode ser substituida por uma variavel String]
[b:0060ed02be]lblapoio.caption:=VarToStr(Excel.WorkBooks[1].Sheets[1].Cells[3,1]);[/b:0060ed02be]
Agora sim, enquanto essa variavel não estiver vazia, ele vai dando um insert no banco de dados, e recebendo os valores do arquivo em Excel.
No final ele avança uma linha no Excel e seta os valores dessa linha na [i:0060ed02be]lblapoio[/i:0060ed02be][os dados que estiverem na coluna 1[A] dessa linha], além de, é claro, gravar os dados no banco de dados
[b:0060ed02be]While lblapoio.caption<>´´ do
Begin
DtmPlugin_Controle.Produto.Insert;
DtmPlugin_Controle.ProdutoNOME.Value:=Excel.WorkBooks[1].Sheets[1].Cells[linha,1];
DtmPlugin_Controle.Produto.Post;
Linha:=Linha+1;
lblapoio.caption:=Excel.WorkBooks[1].Sheets[1].Cells[linha,1];
end;[/b:0060ed02be]
Apresenta uma mensagem depois de tudo isso mostrando o fim da operação
[b:0060ed02be]Application.MessageBox(´Concluído´,´Controle [Excel]´,0);[/b:0060ed02be]
Segue um exemplo com componentes sem renomeacao [componentes DataAcess]
var
Excel: Variant;
Linha:integer;
begin
while not Table1.IsEmpty do
begin
Table1.Delete;
end;
Excel := CreateOleObject(´Excel.Application´);
Excel.Visible :=True;
Excel.WorkBooks.Open(´c:\arquivo.xls´);
linha:=3;
label1.caption:=VarToStr(Excel.WorkBooks[1].Sheets[1].Cells[3,1]);
While label1.caption<>´´ do
Begin
Table1.Insert;
Table1Campo1.Value:=Excel.WorkBooks[1].Sheets[1].Cells[linha,1];
Table1Campo2.Value:=Excel.WorkBooks[1].Sheets[1].Cells[linha,2];
Table1.Post;
Linha:=Linha+1;
label1.caption:=Excel.WorkBooks[1].Sheets[1].Cells[linha,1];
end;
Application.MessageBox(´Concluído´,´Exemplo´,0);
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)