Ver Mensaje Individual
  #1  
Antiguo 02-05-2012
axel.isr axel.isr is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 12
Reputación: 0
axel.isr Va por buen camino
Unhappy Error al leer celda de libro de Excel

Estimados,

Me encuentro realizando una aplicación en donde en uno de sus módulos tengo que importar datos de un libro de Excel.

Tengo mi DataModule (DMExcel) con un TExcelApplication, un TExcelWorkbook y un TExcelWorksheet. Cuando conecta con el libro de Excel no me aparece ningún error, el inconveniente surge al querer leer el contenido de una celda del mismo en esta parte:

Código Delphi [-]
DMExcel.Hoja.Cells.Item[Row, 1]
.

En esa parte, me aparece el siguiente error:
Cita:
Project Project1.exe raised exception class EIntfCastError with message 'Interface not supported'...
He estado buscando sobre este error, pero con resultados negativos sólamente...
Algunos datos mas:
Conecto por el BDE con SQL Server 2005 Express Edition, donde tengo mi tabla de stock que es a donde quiero pasar la información.


El código entero:

Código Delphi [-]
procedure TfrmIngresoStock.ConectarExcel(archivo:string);
var
  ok:boolean; row:integer;
begin
 ok:=true;
  try
    try
      ok:=true;
      //Iniciar ExcelApp
      DMExcel.ExcelApp.Connect;
      try
        //Abrir Workbook
        DMExcel.ExcelApp.Workbooks.Open(archivo,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,
              emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,0  );
        DMExcel.Libro.ConnectTo(DMExcel.ExcelApp.Workbooks[1]);
        //DMExcel.Hoja.ConnectTo(DMExcel.Libro.Worksheets[1] as _worksheet);
      except
      on exception do
      begin
        //No se pudo abrir el archivo de Excel
        ShowMessage('No se ha podido abrir el archivo de Excel');
        ok:=false;
        DMExcel.Libro.Save;
        DMExcel.Libro.Close;
        Abort
      end
      end;
    except
    on exception do
    begin
      ShowMessage('No se ha podido abrir el archivo de Excel');
      ok:=false;
      DMExcel.Libro.Save;
      DMExcel.Libro.Close;
      Abort
    end
    end;
  finally
    if not(ok) then
    begin
      //No se pudo iniciar ExcelApp
      ShowMessage('Error al conectar con Excel.'+#13+'Póngase en contacto con su administrador.');
      DMExcel.Libro.Save;
      DMExcel.Libro.Close;
      Abort
    end
  end
end;

procedure TfrmIngresoStock.ImportarExcel();
var
  row:integer; ok:boolean;
begin
  ok:=true;
  try
    //Abrir tablas
    try
      DataModule1.tStock.Open;
      DataModule1.tProductos.Open;
      row:=2; //Empieza de la segunda fila

      while DMExcel.Hoja.Cells.Item[Row, 1] <> '' do
      begin
        DataModule1.tStock.Append;
        DataModule1.tStockCodProducto.Value := DMExcel.Hoja.Cells.Item[Row, 1];
        DataModule1.tStockIMEI.Value        := DMExcel.Hoja.Cells.Item[Row, 2];
        DataModule1.tStockEstado.Value      := 0;
        DataModule1.tStockF_alta.Value      := DateToStr(Today);
        DataModule1.tStock.Post;
        row:=row+1;
      end;

    except
      on exception do
      begin
        MessageBox(0,'No se ha podido conectar con la base de datos.','Error',MB_ICONWARNING);
        ok:=false;
        Abort
      end
    end; //Cierra segundo try
  finally
  begin
    if ok then
      MessageBox(0,'Datos importados correctamente','ImportData',MB_ICONINFORMATION)
    else
    begin
      MessageBox(0,'No se pudieron importar datos','Error',MB_ICONWARNING);
      Abort
    end;

    //Cierra Libro, App y tablas
    DMExcel.Libro.Save;
    DMExcel.Libro.Close;
    DMExcel.ExcelApp.Quit;
    DMExcel.ExcelApp.Disconnect;

    DataModule1.tStock.Close;
    DataModule1.tProductos.Close;
  end
end
end;

procedure TfrmIngresoStock.Button2Click(Sender: TObject);
begin
  if edtPath.Text <> '' then
  begin
    ConectarExcel(edtPath.Text);
    ImportarExcel;
  end
end;


Desde ya, les agradezco por su ayuda.
Saludos,
Axel.

Última edición por axel.isr fecha: 02-05-2012 a las 00:15:36. Razón: Vista
Responder Con Cita