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;
DMExcel.ExcelApp.Connect;
try
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]);
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;
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
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
try
DataModule1.tStock.Open;
DataModule1.tProductos.Open;
row:=2;
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; 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;
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.