 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Lun 05 Nov, 2007 10:16 pm Asunto: Excel, saber la última línea de datos. |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 06 Nov, 2007 12:01 am Asunto: |
|
|
| 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 |
|
 |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Mar 06 Nov, 2007 12:40 am Asunto: |
|
|
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 |
|
 |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Mar 06 Nov, 2007 3:46 pm Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 24 Nov, 2007 9:00 pm Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|