Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Excel, saber la última línea de datos.

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Excel, saber la última línea de datos. Responder citando

Hola amigos, resulta que tengo un programa donde envío información de un archivo excel a una base de datos... utilizo un ProgressBar y para hacer que vaya deacuerdo a las lineas procesadas, tengo que saber cual es la última línea que tiene información... utilicé esta parte de código:

Código:

      LastCell = xlCells.Exec(Function("SpecialCells")<<11);
      LastRow = LastCell.Exec(PropertyGet("Row"));


Pero como última línea me arroja la última de la hoja de excel (65536), siendo que la última linea de datos es la 1215.

¿¿¿Como puedo hacer para saber cual es la última línea de datos cuando encuentro archivos de Excel con ese problema ???

Sé que podría usar antes del ProgressBar un "for" para saber la última línea de información. Pero deseo saber si hay alguna opción de hacerlo por las clases de Excel, por ejemplo , vi que al momento de presionar la tecla "Fin " o "End" y después la tecla direccional "Abajo" para ir hasta la última linea de información, Excel lo interpreta de esta forma en el Editor de Macros:

Código:

Selection.End(xlDown).Select


Pero no sé como aplicarla en Builder. YA intenté con "Select" , el valor para xlDown es 0xffffefe7, con y sin comillas, pero sin resultados.


Gracias de Antemano.
_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

yao_13 escribió:
Selection.End(xlDown).Select

Puedes hacerlo así:
Código:
// Usamos una instancia abierta de excel
Variant excel = GetActiveOleObject("Excel.Application");
Variant hoja = excel.OlePropertyGet("ActiveSheet");
Variant range = hoja.OlePropertyGet("Cells", 1, 1);
const int xlDown = -4121;
Variant celda = range.OlePropertyGet("End", xlDown);
int fila = celda.OlePropertyGet("Row");
ShowMessage(fila);

o bien:
Código:
Variant excel = GetActiveOleObject("Excel.Application");
Variant seleccion = excel.OlePropertyGet("Selection");
const int xlDown = -4121;
Variant celda = seleccion.OlePropertyGet("End", xlDown);
int fila = celda.OlePropertyGet("Row");
ShowMessage(fila);


yao_13 escribió:
Pero como última línea me arroja la última de la hoja de excel (65536), siendo que la última linea de datos es la 1215

Estaría interesante que pusieras un ejemplo cortito como el anterior de como lo estás haciendo, así como si pudieras enviarme un archivo de Excel en el que no te devuelva la fila correcta (si el método de arriba no te funciona y quieres enviármelo, mi email es: leosoftware ARROBA gmail PUNTO com).
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Ok _leo , muchas gracias por responder... lo intento con tu código y te devuelvo el mensaje mas tarde.

Gracias.
_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Kedó perfecto con ese código _leo... gracias... si gustas , de todos modos puedo enviarte el archivo para ke lo veas.

Solo me keda preguntarte como supiste el valor para xlDown... por ke yo encontré el valor hexadecimal en esta página:
Código:

http://www.geocities.com/ResearchTriangle/9834/graph8.htm

_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

No me había dado cuenta de tu respuesta...

yao_13 escribió:
Kedó perfecto con ese código _leo... gracias... si gustas , de todos modos puedo enviarte el archivo para ke lo veas

Si lo tienes a mano y no te supone mucha molestia me gustaría, solo por hacer algunas pruebas. Sino no te preocupes, es solo por curiosidad.
(mi email: leosoftware ARROBA gmail PUNTO com)

yao_13 escribió:
Solo me keda preguntarte como supiste el valor para xlDown

Como he dicho varias veces, toda la ayuda la saco de la propia referencia que viene con las distintas versiones de Office. Aunque prefiero especialmente la que viene con el Office 2000 y Office XP (en el caso de Excel los archivos: vbaxl9.chm vbaxl10.chm respectivamente) porque la encuentro mas comoda.

Otra forma muy útil es utilizar la función de grabar macro y luego observar el código generado.

https://cppbuilder.es/viewtopic.php?t=10471

excel_constantes1.wmv
excel_constantes2.wmv
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.