Ir al contenido


Foto

[RESUELTO] Manejo de archivo de Excel con OleVariant


  • Por favor identifícate para responder
4 respuestas en este tema

#1 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 28 julio 2010 - 12:59

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 mensajes
  • LocationEspaña

Escrito 28 julio 2010 - 01:58

Buenas,

Prueba a cerrarlo así



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



Nos leemos

  • 0

#3 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 28 julio 2010 - 02:26

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
  • 3.486 mensajes
  • LocationMexico City

Escrito 28 julio 2010 - 04:36

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
  • 14.448 mensajes
  • LocationMéxico

Escrito 28 julio 2010 - 04:44

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.