Ver Mensaje Individual
  #1  
Antiguo 10-10-2005
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Reputación: 21
RONPABLO Va por buen camino
Leer una hoja de Calculo Sin tener Excel instalado

Hola, un cordial saludo, necesito leer una hoja de Calculo y aunque ya lo hice de la siguiente forma:

Código Delphi [-]
procedure TForm1.EjecutarExcell(rutaArchivo : String);
var
   Excel : Variant;
    i : Integer;
begin
   try
      try
         Excel :=  CreateOleObject('Excel.Application');
         Excel.WorkBooks.Open(rutaArchivo);
         Excel.WorkBooks.Open(OpenDialog1.FileName);
          tabla.Open;
         for I := 1 to Excel.Rows.CurrentRegion.Rows.Count do
         begin
            if Excel.Range[ObtenerCelda('a',i)].Value = '' then
            begin
               if tabla.recordCount = 0 then
                   tabla.edit
                else
                   tabla.insert;
                tabla.FieldbyName('a').asString :=
                       Excel.Range[ObtenerCelda('a',i)].Value;
               tabla.FieldbyName('b').asString :=
                        Excel.Range[ObtenerCelda('b',i)].Value;
               tabla.FieldbyName('c').asString :=
                        Excel.Range[ObtenerCelda('c',i)].Value;
               tabla.FieldbyName('d').asString :=
                        Excel.Range[ObtenerCelda('d',i)].Value;
               tabla.FieldbyName('e').asString :=
                        Excel.Range[ObtenerCelda('e',i)].Value;
               tabla.FieldbyName('f').asString :=
                        Excel.Range[ObtenerCelda('f',i)].Value;
               tabla.FieldbyName('g').asString :=
                        Excel.Range[ObtenerCelda('g',i)].Value;
               tabla.FieldbyName('h').asString :=
                        Excel.Range[ObtenerCelda('h',i)].Value;
               tabla.FieldbyName('i').asString :=
                        Excel.Range[ObtenerCelda('i',i)].Value;
               tabla.post;
                tabla.Next;
             end;
         end;
      except
          trans.rollback;
         raise;
      end;
   finally
       tabla.applyUpdate;
       tabla.Close;
        trans.commit;
       Excel.Quit;
   end;
end;
 
 function TForm1.ObtenerCelda(letra : String; Columna :Integer): String;
 begin
    Result := letra + IntToStr(Columna);
 End;

Pero tengo dos inquietudes sobre la forma como lo hago:

1. Como puedo hacer mas rapido la lectura ya que son al rededor de 15.000 registros y se me demora varios minutos haciendolo (la info la guardo en una bd Firebird, pero la demora no es por esto, ya que como prueba cambie donde igualaba los campos por variables llamadas a, b, c,..., i. Todas de tipo String y la demora fue similar).
2. Hay forma de recorrer los registros sin que ejecute excel ni ninguna otra hoja de Calculo.
Responder Con Cita