Jump to content


Photo

[RESUELTO] Manejo de archivo de Excel con OleVariant


  • Please log in to reply
4 replies to this topic

#1 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 28 July 2010 - 12:59 PM

Hola a todos chicos y chicas de DA....

Vengo con una nueva dudilla que me ha surgido  8o|... Les platico...

Tengo un archivo de Excel que leo para cargar en un StringGrid (ésto ya lo hago sin problemas con un componente TQImport2XLS), pero ahora me ha surgido la necesidad de saber cuántos registros (rows) existen en el archivo ANTES de cargarlo en el StringGrid...

Para ello hice ésto:



delphi
  1. procedure TfrmIntImpo16.ImportaDatos;
  2. const
  3.   xlCellTypeLastCell = $0000000B;
  4. var
  5. Excel, Sheet: OLEvariant;
  6. CantRow: Integer;
  7. begin
  8.  
  9.   Excel := CreateOleObject('Excel.Application');
  10.   Excel.Workbooks.Open(edtPath.Text);
  11.  
  12.   Sheet := Excel.Workbooks[ExtractFileName(edtPath.Text)].WorkSheets[1];
  13.   Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
  14.  
  15.   CantRow := Excel.ActiveCell.Row; // Aquí me da el total de registros
  16.  
  17.   Excel.Workbooks.Close; // Esta línea se la agregué para que no me diera error de recurso compartido al usar de nuevo el archivo para cargarlo más adelante



El detalle es que cuando ejecuta esta linea Excel.Workbooks.Close; me manda un cuadro de diálogo para preguntarme si deseo guardar el archivo, pero no quiero que me pregunte, quiero que lo cierre sin preguntarme nada de nada.... o como quien dice, que lo cierre sin guardar por default...

Aquí las preguntas:

1. La manera de obtener el total de registros es la mejor como lo estoy  haciendo ?
2. Cómo puedo decirle a la variable Excel que cierre el archivo sin necesidad de que pregunte si guarda o no ?

Saludox y Gracias a todos (y) :)






  • 0

#2 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 posts
  • LocationEspaña

Posted 28 July 2010 - 01:58 PM

Buenas,

Prueba a cerrarlo así



delphi
  1.       Excel.DisplayAlerts := False;
  2.       Excel.Quit;



Nos leemos

  • 0

#3 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 28 July 2010 - 02:26 PM

Buenas,

Prueba a cerrarlo así



delphi
  1.       Excel.DisplayAlerts := False;
  2.       Excel.Quit;



Nos leemos


Probando (y)

Saludox ! :)
  • 0

#4 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 28 July 2010 - 04:36 PM

Quedó funcionando de perlas de la siguiente manera:



delphi
  1. const
  2.   xlCellTypeLastCell = $0000000B;
  3. var
  4. Excel, Sheet: OLEvariant;
  5. CantRow: Integer;
  6. sArchivo: String;
  7. begin
  8.  
  9.   sArchivo := edtPath.Text;
  10.   Excel := CreateOleObject('Excel.Application');
  11.   Excel.Workbooks.Open(sArchivo);
  12.  
  13.   Sheet := Excel.Workbooks[ExtractFileName(sArchivo)].WorkSheets[1];
  14.   Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
  15.  
  16.   CantRow := Excel.ActiveCell.Row-1;
  17.  
  18.   Excel.DisplayAlerts := False;
  19.   Excel.Workbooks.Close;
  20.   Excel.Quit;



Gracias amigo Cadetill (y)

Saludox ! :)
  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 28 July 2010 - 04:44 PM

Nada mas asegurate que el excel no se quede con el DisplayAlerts en false ;), si no regresalo a True :D

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.