Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-05-2012
axel.isr axel.isr is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 12
Poder: 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
  #2  
Antiguo 02-05-2012
Avatar de kapcomx
kapcomx kapcomx is offline
Miembro
 
Registrado: jun 2007
Ubicación: Puebla México
Posts: 350
Poder: 17
kapcomx Va por buen camino
raro...

Amigo axel he hecho algunas importaciones de Excel y nunca he tenido problemas, te dejo un ejemplo donde paso el contenido de una hoja excel a un stringgrid a ver si te sirve..


Código Delphi [-]
 
procedure Tformma.abrirClick(Sender: TObject);
var
   i: integer;
begin
abrir.Execute ;
nombre:=abrir.FileName ;
  IF nombre='' THEN
 begin
 SHOWMESSAGE('NO SELECCIONO NINGUN ARCHIVO')  ;  
 end
 ELSE
 BEGIN
  Excelapplication1.Workbooks.Open(nombre,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,Empty  Param,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
  Hoja := Excelapplication1.Worksheets.Item[1] as _WorkSheet;
   i := 1;
   si :='1';
     for I := 1 to Stringgrid1.RowCount - 1 do
     Stringgrid1.Rows[i].Clear;
     stringgrid1.ColCount:=20;
     stringgrid1.RowCount:=1000;
   //*****
    with StringGrid1 do
     begin
       // Título de las columnas
        Cells[0, 0] := '' ;
        Cells[1, 0] := 'A' ;
        Cells[2, 0] := 'B' ;
        Cells[3, 0] := 'C' ;
        Cells[4, 0] := 'D' ;
        Cells[5, 0] := 'E' ;
        Cells[6, 0] := 'F' ;
        Cells[7, 0] := 'G' ;
        Cells[8, 0] := 'H' ;
        Cells[9, 0] := 'I' ;
        Cells[10, 0] := 'J' ;
        Cells[11, 0] := 'K' ;
        Cells[12, 0] := 'L' ;
        Cells[13, 0] := 'M' ;
        Cells[14, 0] := 'N' ;
        Cells[0,1] := '1' ;

        for i:=1 to 1000 do
        begin
           si := IntToStr(i);
           Cells[0,I] := SI;
           Cells[1,i] := Hoja.Range['a'+si,'a'+si].Value2;
           Cells[2,i] := Hoja.Range['b'+si,'b'+si].Value2;
           Cells[3,i] := Hoja.Range['c'+si,'c'+si].Value2;
           Cells[4,i] := Hoja.Range['d'+si,'d'+si].Value2;
           Cells[5,i] := Hoja.Range['e'+si,'e'+si].Value2;
           Cells[6,i] := Hoja.Range['f'+si,'f'+si].Value2;
           Cells[7,i] := Hoja.Range['g'+si,'g'+si].Value2;
           Cells[8,i] := Hoja.Range['h'+si,'h'+si].Value2;
           Cells[9,i] := Hoja.Range['i'+si,'i'+si].Value2;
           Cells[10,i] := Hoja.Range['j'+si,'j'+si].Value2;
           Cells[11,i] := Hoja.Range['k'+si,'k'+si].Value2;
           Cells[12,i] := Hoja.Range['l'+si,'l'+si].Value2;
           Cells[13,i] := Hoja.Range['m'+si,'m'+si].Value2;
 
            // VarType( Excelapplication1.Range['c'+si,'c'+si].Value2 ) = VarEmpty
        end;
        end;
 
end;
         StringGrid1.Visible :=True;
end;










Saludos...
__________________
un tipo al cual la sociedad no le tiene el mas mínimo respeto no puede ser presidente....
Responder Con Cita
  #3  
Antiguo 02-05-2012
axel.isr axel.isr is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 12
Poder: 0
axel.isr Va por buen camino
Pensándolo bien, ahora se me ocurre que el error puede ser debido a que el exe se encuentra en una pc dentro de mi red. Y yo lo estoy ejecutando en mi máquina, donde selecciono un archivo que se encuentra en mi máquina.
Intentaré seleccionando algún archivo dentro de la misma pc donde esta el exe para ver si se soluciona. Ya que a mi también me parece muy raro porque este mismo procedimiento ya lo he utilizado en otra aplicación sin ningún tipo de problemas.

Por otro lado... no termino de comprender el stringrid... Con tu procedimiento, se pasan los datos del excel al string grid, cierto? Y si no me equivoco, luego tendria que pasar los datos del stringgrid a la base de datos, no?

Desde ya, te agradezco por tu colaboración.
Responder Con Cita
  #4  
Antiguo 02-05-2012
axel.isr axel.isr is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 12
Poder: 0
axel.isr Va por buen camino
No me golpeen! Soy tan solo un noob

Bueno... el error surgía ya que jamás conectaba la hoja de Excel al fichero ya que tenía la siguiente línea comentada :P

Código Delphi [-]
//DMExcel.Hoja.ConnectTo(DMExcel.Libro.Worksheets[1] as _worksheet);

Desde ya, muchas gracias por tu ayuda kapcomx.
Saludos!
Responder Con Cita
  #5  
Antiguo 02-05-2012
Avatar de kapcomx
kapcomx kapcomx is offline
Miembro
 
Registrado: jun 2007
Ubicación: Puebla México
Posts: 350
Poder: 17
kapcomx Va por buen camino
error

amigo Axel, bien por que solucionaste tu error, no eres el unico que le pasa a mi me ha pasado tambien que tareas que crees tener dominadas, se te pasan y te hacen darte de topes un buen rato jejejeje
__________________
un tipo al cual la sociedad no le tiene el mas mínimo respeto no puede ser presidente....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Leer el hyperlik de una celda en un archivo de excel jazmin OOP 7 11-05-2010 22:11:05
Del libro de excel a paradox Camilo Conexión con bases de datos 2 26-09-2008 16:16:33
Leer Comentario en Celda de Excel Kipow Servers 1 25-09-2008 21:33:19
Problemas con Libro de Excel lgarcia Servers 2 15-12-2006 22:06:15
al cerrar un libro se me cierra el Excel! haron Servers 0 30-05-2003 11:07:26


La franja horaria es GMT +2. Ahora son las 17:16:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi