Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
:blink: Ae gente http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif vi nesse topico http://forum.imasters.com.br/index.php?showtopic=259016 como importar dados do Excel p/ uma grid mais alguem sabe como importar p/ um banco de dados??
Vlw t+
http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
Entaum eu tentei doutros jeitos mais como eu comecei a programar a pouco tempo ainda tenhu muitas duvidas de como fazer certas coisas.
Bom, não testei o código abaixo, mas acho que vai te ajudar pra começar... Vamos supor que sua tabela tem a seguinte estrutura (que será igual a da planilha a ser importada):
TABELA TESTE
CODIGO INTEGER;
NOME STRING;
IDADE INTEGER;
Na estrutura acima, a primeira coluna da planilha seria o código, a segunda o nome e a terceira idade ok? Ai a rotina ficaria algo semelhante a isto:
function ImportaXLS(AXLSFile: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
XLApp, Sheet: OLEVariant;
RangeMatrix: Variant;
x, y, k, r: Integer;
//Variáveis a serem usadas nos inserts
Codigo, Idade : Integer;
Nome : String; XLApp.Visible:=False;
//Abre o Workbook
XLApp.Workbooks.Open(AXLSFile);
Sheet:=XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
//Pegar o número da última linha
x:=XLApp.ActiveCell.Row;
//Pegar o número da última coluna
y:=XLApp.ActiveCell.Column;
//Associaca a variant WorkSheet com a variant do Delphi
RangeMatrix:=XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
//Cria o loop para carregar os registros nas variáveis de controle e passar para uma rotina de inserção no banco
k:=1;
repeat
for r:=1 to y do
Case r of
1 : Codigo := RangeMatrix[K, R]; //Talvez aqui precise converter o valor
2 : Nome := RangeMatrix[K, R]; //Talvez aqui precise converter o valor
3 : Idade := RangeMatrix[K, R]; //Talvez aqui precise converter o valor
End;
InserirDadosBanco(Codigo, Nome, Idade); //Rotina para gravar os dados no banco com suas devidas validações
Inc(k,1);
until k > x;
RangeMatrix:=Unassigned; XLApp.Quit;
XLAPP:=Unassigned;
Sheet:=Unassigned;
Result:=True;
end;
end;
end;:clap:Ae broder concegui vlw mesmo em o codigo ficou assim:http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
function TForm1.ImportaXLS(AXLSFile: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
XLApp, Sheet: OLEVariant;
RangeMatrix: Variant;
x, y, k, r: Integer;
//Variáveis a serem usadas nos inserts
COD, VALOR : Integer;
DESCRICAO : String;
begin
Result:=False;
//Cria Excel- OLE Object
XLApp:=CreateOleObject('Excel.Application');
try
//Esconde Excel
XLApp.Visible:=False;
//Abre o Workbook
XLApp.Workbooks.Open(AXLSFile);
Sheet:=XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
//Pegar o número da última linha
x:=XLApp.ActiveCell.Row;
//Pegar o número da última coluna
y:=XLApp.ActiveCell.Column;
//Associaca a variant WorkSheet com a variant do Delphi
RangeMatrix:=XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
//Cria o loop para carregar os registros nas variáveis de controle e passar para uma rotina de inserção no banco
k:=1;
repeat
for r:=1 to y do
Case r of
1 : COD := RangeMatrix[K, R]; //Talvez aqui precise converter o valor
2 : DESCRICAO := RangeMatrix[K, R]; //Talvez aqui precise converter o valor
3 : VALOR := RangeMatrix[K, R]; //Talvez aqui precise converter o valor
End;
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('insert into PRODUTO (COD, DESCRICAO, VALOR)');
IBQuery1.SQL.Add('values (:COD, :DESCRICAO, :VALOR)');
IBQuery1.ParamByName('COD').AsString := IntToStr(COD);
IBQuery1.ParamByName('DESCRICAO').AsString := DESCRICAO;
IBQuery1.ParamByName('VALOR').AsString := IntToStr(VALOR);
IBQuery1.ExecSQL;
// InserirDadosBanco(Codigo, Nome, Idade); //Rotina para gravar os dados no banco com suas devidas validações
Inc(k,1);
until k > x;
RangeMatrix:=Unassigned;
finally
//Fecha o Excel
if not VarIsEmpty(XLApp) then
begin
XLApp.Quit;
XLAPP:=Unassigned;
Sheet:=Unassigned;
Result:=True;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ImportaXLS('C:\Documents and Settings\Gabriel\Desktop\Plan1.xls');
end;
T+ vlw http://forum.imasters.com.br/public/style_emoticons/default/clap.gif
No caso o fonte carrega tudo primeiramente para um TStringGrid, e então depois poderia fazer o procedimento que desejar, sendo que poderia ler o TStringGrid e inserir no seu BD. Mas bom que conseguiu...
Pelo que vi no código do link que passou, a rotina de carga do excel lê linha a linha e coluna a coluna os valores da planilha e joga num grid... o que você teria que fazer é ler a linha, guardar os valores que quer gravar em variáveis (1 pra cada coluna provavelmente) e depois, ao mudar de linha, dar um insert no banco com os valores lidos antes de ler os dados da nova linha... só estudar um pouco a rotina do link que você consegue fazer. ;)