Aqui na Telemont, eu tenho feito muito disto nos últimos tempos. Geralmente como eu faço?
Salvo a planilha em formato Texto separado por tabulações e uso uma rotina que lê os dados. Veja um exemplo tipico que uso, abaixo. Analise o código pra ver como eu faço. Não se preocupe com nomes de campos ou supostas funções minhas que venham a aparecer. procedure TfmpNumPedido.btnImportClick(Sender: TObject); const // CMEDICAOMATERIAL = '2.1.14'; // CMEDICAOSERVICO = '2.1.09'; CMEDICAOMATERIAL = '2.1.17'; CMEDICAOSERVICO = '2.1.16'; // CMEDICAOMATERIAL = '2.1.14'; // CMEDICAOSERVICO = '2.1.09'; CFATURAMENTOMATERIAL = '2.1.17'; CFATURAMENTOSERVICO = '2.1.16'; var fb : file of byte; fi, fo, fr : textfile; line, preco, DadNumMedicao, DadNumNota, DadNumItem, DadNumPedido, DadPedItem, DadPedValor, BackupName, strLocate, strSelMov, strMov, fname : string; (*$IFDEF DEBUG*) LinhaLog: String; (*$ENDIF*) nprod, nrejected, nerror, iLenghtLine, i, j: integer; idmov : integer; done : boolean; qryItensMov, qryMov, qrySelMov, qryLocate : TQuery; begin if eFileName.Text = '' then begin MessageDlg('Você deverá selecionar um arquivo para proceder com a importação', mtError, [mbOk], 0); eFileName.Setfocus; Exit; end; // btnAbort.Visible := True; btnImport.Visible := False; DecimalSeparator := '.'; ProgressBarImport.Min := 0; ProgressBarImport.Max := 0; ProgressBarImport.Position := 1; codfilial := Param.Filial; StopProcess := False; // (*$IFDEF DEBUG*) assignfile(f, 'c:\temp\tstimpnumpedido.txt'); rewrite(f); writeln(f, 'Numero de pedidos importados'); writeln(f, 'Data da importação: ' + DateToStr(Now)); writeln(f,''); (*$ENDIF*) try ProgressBarImport.position := 0; assignfile(fb, eFileName.text); FileMode := 0; reset(fb); ProgressBarImport.max := FileSize(fb); closefile(fb); except Exit; end; try assignfile(fi, eFileName.text); {$i-} Reset(fi); {$i+} if ioresult <> 0 then begin MessageDlg('Erro ao abrir arquivo ' + eFileName.text + 'Erro: ' + Exception(exceptobject).message, mtError, [mbOk], 0); exit; end; // fmpNumPedido.Caption := 'Importanto arquivo ' + eFileName.text; CombStatusPlan.Enabled := False; chkMedicaoesFat.Enabled := False; fname := eFileName.text; i := length(fname); // while (i > 1) and (fname[i] <> '.') do dec(i); fname := copy(fname, 1, i); // Abre as tabelas do banco para preparação da importação do número do pedido. if iStatusPlan = 0 then begin strLocate := 'select CAMPOLIVRE2 from TMOV where CODFILIAL = :CODFILIAL and CODCOLIGADA = :CODCOLIGADA and CODTMV in ("' + CMEDICAOSERVICO + '","' + CMEDICAOMATERIAL + '") and SERIE = "MD" and NUMEROMOV = :NUMEROMOV'; if chkMedicaoesFat.Checked then strSelMov := 'select IDMOV from TMOV where CODFILIAL = :CODFILIAL and CODCOLIGADA = :CODCOLIGADA and CODTMV in ("' + CMEDICAOSERVICO + '","' + CMEDICAOMATERIAL + '") and SERIE = "MD" and NUMEROMOV = :NUMEROMOV and STATUS = "F"' else strSelMov := 'select IDMOV from TMOV where CODFILIAL = :CODFILIAL and CODCOLIGADA = :CODCOLIGADA and CODTMV in ("' + CMEDICAOSERVICO + '","' + CMEDICAOMATERIAL + '") and SERIE = "MD" and NUMEROMOV = :NUMEROMOV and STATUS = "A"'; end else begin strLocate := 'select CAMPOLIVRE2 from TMOV where CODFILIAL = :CODFILIAL and CODCOLIGADA = :CODCOLIGADA and CODTMV in ("2.2.01", "2.2.15") and SERIE in ("U", "1") and NUMEROMOV = :NUMEROMOV'; strSelMov := 'select IDMOV from TMOV where CODFILIAL = :CODFILIAL and CODCOLIGADA = :CODCOLIGADA and CODTMV in ("2.2.01", "2.2.15") and SERIE in ("U", "1") and NUMEROMOV = :NUMEROMOV and STATUS = "F"'; end; // qryLocate := TQuery.Create(nil); qryLocate.DatabaseName := CorporeRM.DatabaseName; qryLocate.sql.Clear; qryLocate.sql.Add(strLocate); qryLocate.Prepare; // qrySelMov := TQuery.Create(nil); qrySelMov.DatabaseName := CorporeRM.DatabaseName; qrySelMov.sql.Clear; qrySelMov.sql.Add(strSelMov); qrySelMov.Prepare; // qryMov := TQuery.Create(nil); qryMov.DatabaseName := CorporeRM.DatabaseName; qryMov.sql.Clear; // if iStatusPlan = 0 then qryMov.sql.Add('update TMOV set CAMPOLIVRE2 = :NUMPEDIDO where SERIE = "MD" and CODFILIAL = :CODFILIAL and CODCOLIGADA = :CODCOLIGADA and IDMOV = :IDMOV') else qryMov.sql.Add('update TMOV set CAMPOLIVRE2 = :NUMPEDIDO where SERIE in ("U", "1") and CODFILIAL = :CODFILIAL and CODCOLIGADA = :CODCOLIGADA and IDMOV = :IDMOV'); qryMov.Prepare; // qryItensMov := TQuery.Create(nil); qryItensMov.DatabaseName := CorporeRM.DatabaseName; qryItensMov.sql.Clear; qryItensMov.sql.Add('update TITMMOV set CAMPOLIVRE = :ITEM where NUMEROSEQUENCIAL = :NUMEROSEQMOV and CODCOLIGADA = :CODCOLIGADA and IDMOV = :IDMOV'); qryItensMov.Prepare; // readln(fi, line); // Começa a coleta de dados dos valores das atividades da planília while (not done) and (not Eof(fi)) and (not StopProcess) do begin readln(fi, line); iLenghtLine := length(Line); if (line <> '') then begin StatusBar1.Panels[0].Text := 'Lendo o arquivo de importação'; i := 0; j := 0; DadNumMedicao := ''; DadNumNota := ''; DadNumItem := ''; DadNumPedido := ''; DadPedItem := ''; preco := ''; DadPedValor := '0'; btnAbort.Visible := True; btnImport.Visible := False; while i <= iLenghtLine do begin { while (i <= iLenghtLine) and (line[i] <> #$09) do // Pula o campo Código da Atividades inc(i); while line[i] = #$09 do inc(i); while (i <= iLenghtLine) and (line[i] <> #$09) do // Pula o campo Código da Localidade inc(i); while line[i] = #$09 do inc(i); while (i <= iLenghtLine) and (line[i] <> #$09) do // Pula o campo Descrição inc(i); while line[i] = #$09 do inc(i); } while (i <= iLenghtLine) and (line[i] <> #$09) do // Numero do movimento/Medição begin if line[i] <> '' then DadNumMedicao := DadNumMedicao + line[i]; inc(i); end; while line[i] = #$09 do inc(i); // if iStatusPlan = 1 then begin while (i <= iLenghtLine) and (line[i] <> #$09) do // Numero da Nota fiscal (somente para importação de pedidos já faturados) begin if line[i] <> '' then DadNumNota := DadNumNota + line[i]; inc(i); end; while line[i] = #$09 do inc(i); end; // while (i <= iLenghtLine) and (line[i] <> #$09) do // Sequência do ítem begin if line[i] <> '' then DadNumItem := DadNumItem + line[i]; inc(i); end; // while line[i] = #$09 do inc(i); while (i <= iLenghtLine) and (line[i] in ['0'..'9', ',', '.',' ']) do // Valor do ítem begin if line[i] in ['0'..'9',','] then DadPedValor := DadPedValor + line[i]; inc(i); end; // while line[i] = #$09 do inc(i); while (i <= iLenghtLine) and (line[i] <> #$09) do // Número do pedido PC begin if line[i] <> '' then DadNumPedido := DadNumPedido + line[i]; inc(i); end; // while line[i] = #$09 do inc(i); while (i <= iLenghtLine) and (line[i] <> #$09) do // Número do ítem do pedido PC begin if line[i] <> '' then DadPedItem := DadPedItem + line[i]; inc(i); end; // while line[i] = #$09 do inc(i); inc(i); // para pular coluna de valor do serviço inc(j); Application.ProcessMessages; end; if iStatusPlan = 0 then DadNumMedicao := SomenteDigitos(DadNumMedicao,6) else DadNumNota := SomenteDigitos(DadNumNota,6); Label5.Caption := ''; StatusBar1.Panels[0].Text := 'Processando o arquivo de importação'; try qryLocate.Close; qryLocate.ParamByName('CODFILIAL').AsInteger := codfilial; qryLocate.ParamByName('CODCOLIGADA').AsInteger := CorporeRM.Coligada; if iStatusPlan = 0 then qryLocate.ParamByName('NUMEROMOV').AsString := DadNumMedicao else qryLocate.ParamByName('NUMEROMOV').AsString := DadNumNota; qryLocate.Open; begin try qrySelMov.ParamByName('CODFILIAL').AsInteger := codfilial; qrySelMov.ParamByName('CODCOLIGADA').AsInteger := CorporeRM.Coligada; if iStatusPlan = 0 then qrySelMov.ParamByName('NUMEROMOV').AsString := DadNumMedicao else qrySelMov.ParamByName('NUMEROMOV').AsString := DadNumNota; qrySelMov.Open; if not qrySelMov.Eof then begin idmov := qrySelMov.FieldByName('IDMOV').AsInteger; Label5.Caption := DadNumPedido; try // Começa a atualizar primeiramente as medições, ou as notas fiscais caso as medições já tenham sido faturadas. qryMov.ParamByName('CODFILIAL').AsInteger := codfilial; qryMov.ParamByName('NUMPEDIDO').AsString := DadNumPedido; qryMov.ParamByName('CODCOLIGADA').AsInteger := CorporeRM.Coligada; qryMov.ParamByName('IDMOV').AsInteger := idmov; // (*$IFDEF DEBUG*) if iStatusPlan = 0 then LinhaLog := 'Medição lida: ' + DadNumMedicao + '; Numero do PC gerado: ' + DadNumPedido else LinhaLog := 'Nota fiscal lida: ' + DadNumNota + '; Numero do PC gerado: ' + DadNumPedido; (*$ENDIF*) qryMov.ExecSQL; try // if iStatusPlan = 0 then Label2.Caption := 'Importando o item ' + DadPedItem + ' da Medição nº: ' + DadNumMedicao else Label2.Caption := 'Importando o item ' + DadPedItem + ' da Nota Fiscal nº: ' + DadNumNota; // Começa a atualizar os ítens das medições, ou das notas fiscais caso as medições já tenham sido faturadas. qryItensMov.ParamByName('ITEM').AsString := DadPedItem; qryItensMov.ParamByName('NUMEROSEQMOV').AsString := DadNumItem; qryItensMov.ParamByName('CODCOLIGADA').AsInteger := CorporeRM.Coligada; qryItensMov.ParamByName('IDMOV').AsInteger := idmov; (*$IFDEF DEBUG*) LinhaLog := LinhaLog + '; Número do ítem PC gerado: ' + DadPedItem; (*$ENDIF*) qryItensMov.ExecSQL; // except nerror := 2501; if MessageDlg('Ocorreu um erro durante a importação dos dados. O arquivo de importação pode estar com algum erro ou a conexão com o banco de dados foi perdida durante este processo. É recomendável você cancelar esta importação e revisar o arquivo de origem.' + #$0a + #$0d + #$0a + #$0d + exception(exceptobject).Message + #$0a + #$0d + #$0a + #$0d + 'Deseja prosseguir com a importação? ', mtError, [mbYes, mbNo], 0) = mrNo then begin StopProcess := True; qryItensMov.Close; end; (*$IFDEF DEBUG*) LinhaLog := LinhaLog + exception(exceptobject).Message; (*$ENDIF*) end; except nerror := 2501; if MessageDlg('Ocorreu um erro durante a importação dos dados. O arquivo de importação pode estar com algum erro ou a conexão com o banco de dados foi perdida durante este processo. É recomendável você cancelar esta importação e revisar o arquivo de origem.' + #$0a + #$0d + #$0a + #$0d + exception(exceptobject).Message + #$0a + #$0d + #$0a + #$0d + 'Deseja prosseguir com a importação? ', mtError, [mbYes, mbNo], 0) = mrNo then begin StopProcess := True; qryMov.Close; end; (*$IFDEF DEBUG*) LinhaLog := exception(exceptobject).Message; (*$ENDIF*) end; end; qrySelMov.Close; except nerror := 2502; if MessageDlg('Ocorreu um erro ao conectar com o banco de dados. A conexão pode ter sido perdida devido a um erro de rede. É recomendável você cancelar esta importação e revisar a conexão com a base de dados.'+ #$0a + #$0d + #$0a + #$0d + exception(exceptobject).Message + #$0a + #$0d + #$0a + #$0d + 'Deseja prosseguir com a importação?', mtError, [mbYes, mbNo], 0) = mrNo then StopProcess := True; end; end; except nerror := 2502; if MessageDlg('Ocorreu um erro ao conectar com o banco de dados. A conexão pode ter sido perdida devido a um erro de rede. É recomendável você cancelar esta importação e revisar a conexão com a base de dados.'+ #$0a + #$0d + #$0a + #$0d + exception(exceptobject).Message + #$0a + #$0d + #$0a + #$0d + 'Deseja prosseguir com a importação?', mtError, [mbYes, mbNo], 0) = mrNo then StopProcess := True; end; end; (*$IFDEF DEBUG*) writeln(f, LinhaLog); (*$ENDIF*) ProgressBarImport.StepBy(iLenghtLine + 2); Application.ProcessMessages; end; finally MessageDlg('Importação finalizada', mtInformation, [mbOk], 0); // CloseFile(fi); qryMov.UnPrepare; qryItensMov.UnPrepare; if nerror <> 2502 then qrySelMov.UnPrepare; // FreeAndNil(qryMov); FreeAndNil(qryItensMov); FreeAndNil(qrySelMov); // btnAbort.Visible := False; btnImport.Visible := True; CombStatusPlan.Enabled := True; chkMedicaoesFat.Enabled := True; ProgressBarImport.Position := 0; Label5.Caption := ''; Label2.Caption := ''; // (*$IFDEF DEBUG*) closefile(f); (*$ENDIF*) // if not StopProcess then begin // StatusBar1.Panels[0].Text := 'Concluido'; BackupName := ExtractFileName(eFileName.text); BackupName := ChangeFileExt(BackupName, '.old'); if not RenameFile(eFileName.text, BackupName) then raise Exception.Create('Não foi possível renomear o arquivo já importado!'); // end else StatusBar1.Panels[0].Text := 'Interrompido por apresentar erros no processo'; // end; end; []s Walter Alves Chagas Junior Projeto e desenvolvimento de sistemas Telemont Engenharia de telecomunicações Belo Horizonte - MG - Brazil [EMAIL PROTECTED] Fone: (31) 3389-8215 Fax: (31) 3389-8200 -----Mensagem original----- De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] nome de MarcioCC© Enviada em: quinta-feira, 16 de março de 2006 09:36 Para: delphi-br@yahoogrupos.com.br Assunto: [delphi-br] Itabyte® - Importar .xls para Firebird !!! Itabyte® - Importar .xls para Firebird !!! Bom dia pessoal tudo lesgal , seguinte to desenvolvendo um Terminal de consulta para um supermercado , este programa vai funcionar paralelo a um programa de automação comercial , este programa de automação comercial vai gerar um arquivo .xls dos produtos cadastrados para importar para meu programa. Eu quero deixar isso automatico tipo deixar um botão com o nome importar , qdo clicado importará o arquivo .xls para meu banco Firebird 1.5 (DELPHI 7) para o Terminal achar o produto cadastrado. Alguem ja fez isso ?? Por favor daria para me enviar um exemplo ?? Obrigado !!! JESUS TE AMA !!! __________________________________________________________________ Itabyte® MarcioCC© Analista Programador For Delphi - www.itabyte.com ICQ#: 261138854 Current ICQ status: ( Home Tel#: 15-3524-1946 ( Work Tel#: 15-9703-4901 7 Fax#: 15-3522-0777 + More ways to contact me Get ICQ! __________________________________________________________________ [As partes desta mensagem que não continham texto foram removidas] -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas] -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> <*> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages <*> Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html