[RESUELTO] Seleccionar celdas visibles

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
JorgeSanti
Mensajes: 23
Registrado: Dom Abr 10, 2016 7:36 pm

[RESUELTO] Seleccionar celdas visibles

Mensaje por JorgeSanti »

Hola a todos!
Si bien es mi primera participación en el foro, lo vengo siguiendo desde hace bastante tiempo sin registrarme.
Me resisto a preguntar, pues puede ser algo muy obvio, pero la verdad que no encuentro una solución, o por lo menos una solución que entienda.
El caso es que quiero copiar un rango de celdas, de las cuales he efectuado previamente un filtro. O sea que quedaron filas visibles y filas ocultas.
Con copyRange el tema estaría solucionado, pero para ello necesito seleccionar el rango que quiero copiar, que está constituido por todas las filas visibles (despues del filtrado) y algunas columnas (todas contiguas).
En los ejemplos del libro de Mauricio, en la wiki y en el resto de lugares por los que estuve, parten del rango ya seleccionado.
Así en el ejemplo publicado "Sub CopiarSoloVisibles2" funciona perfecto si selecciono manualmente el rango.
Pero como quiero hacer todo (filtrado en hoja origen y copiado en otra hoja) en una misma macro, no me resulta apropiado pedirle al usuario que, en el medio de la ejecución, seleccione los datos a copiar.
Es decir, no quiero utilizar el

Código: Seleccionar todo

oSel = ThisComponent.getCurrentSelection()
, pues necesito poder identificar por codigo el rango a copiar.
Alguna sugerencia???
Gracias.

PD: De ser posible, prefiero no utilizar EasyDev ni otra librería adicional.
Apache OpenOffice 4.1.2.
Windows 7
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Seleccionar celdas visibles

Mensaje por mauricio »

Con EasyDev es trivial, pero si no quieres utilizarla... tienes el código para ver como lo hace: https://github.com/UniversoLibreMexicoA ... lc.py#L342
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
JorgeSanti
Mensajes: 23
Registrado: Dom Abr 10, 2016 7:36 pm

Re: Seleccionar celdas visibles

Mensaje por JorgeSanti »

Gracias, Mauricio por la pronta respuesta!
Voy a compartir el resultado del trabajo con otros colegas, por lo que no quiero utilizar agregados o extensiones, que otros no tendrán. Es por ello que prefiero no utilizarlo. (Espero no te ofendas!!)
Pretendo difundir el uso de OpenOffice (despues vere si también funciona en LibreOffice) y como sabras el usuario de MsExcel no esta acostumbrado a instalar extensiones.
El codigo que me pasas, está hecho en Python, verdad?
La verdad que no manejo otros lenguajes, bahh, jajaja tampoco manejo éste!!!! Me estoy divirtiendo bastante con esto de las macros, pues la ultima vez que hice algo fue en el Basic de la Commodore 64!!!! (habras leido algo en algun libro de historia!! jajaja Ya delaté mi edad!)
Había pensado en utilizar cursores, y utilizar collapseToCurrentRegion pero también debo partir de la selección de una celda.
La ultima opcion (si no me queda otra) es ir recorriendo una por una las filas, preguntar si es visible, hasta encontrar la primera no visible y así armar el rango a copiar. Pero no me parece eficiente.
La hoja podra tener 20.000 filas promedio, que una vez filtrada quedaran 15 (promedio) visibles, y de las cuales voy a copiar algunas columnas.
La fila numero 1y 2 de la hoja son las unicas que no cambian, pues no contienen datos, sino titulos y titulos de las columnas. No hay ninguna funcion para NextVisible? (estoy inventando pues no estoy seguro si lei algo en algun lado, pues ya estoy mareado!)
Otra: puedo seleccionar Todo! Es decir de la primera (la fila nro. 3 en mi caso) hasta la ultima utilizada (para ello esta la funcion) pues al utilizar copyRange se copiaran solo las visibles. Es así? La unica contra de esto, es que copio a ciegas, no se cuantas filas estoy copiando.
En fin, si alguien tiene alguna sugerencia, sera bienvenida.
Gracias!!!
Apache OpenOffice 4.1.2.
Windows 7
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Seleccionar celdas visibles

Mensaje por mauricio »

Mira aquí: https://wiki.openoffice.org/wiki/ES/Man ... especiales

ahí esta todo lo que necesitas...

[Modo Broma ON]
P.D. Ofenderse?, no que va compañero... es lastima, jejejeje
[Modo Broma OFF]
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
JorgeSanti
Mensajes: 23
Registrado: Dom Abr 10, 2016 7:36 pm

Re: Seleccionar celdas visibles

Mensaje por JorgeSanti »

Jajaja, me imaginaba que tenias buen humor!!!
Gracias. Esta noche me pondré a investigar lo que me pasaste.
Slds.
Apache OpenOffice 4.1.2.
Windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Seleccionar celdas visibles

Mensaje por fornelasa »

Voy a decir algo pero por favor no le digan a nadie ..... ya quisieran nuestros amigos Excelianos tener un Add-In como el que Mauricio desarrolló para nosotros.
Lo más chistoso es que si "ellos" tuvieran dicho Add-In, ellos si lo apreciarían muchisisimo más de lo que nosotros lo hemos hecho aquí.

De bote pronto (ahorita en mi caso no hay tiempo para más) y pasando a otra cosa, no sé porque estamos batallando con este tema cuando parece que al aplicar un filtro automático la selección de celdas se da en automático a las celdas solo visibles.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
JorgeSanti
Mensajes: 23
Registrado: Dom Abr 10, 2016 7:36 pm

Re: Seleccionar celdas visibles

Mensaje por JorgeSanti »

Estimado fornelasa, de ninguna manera fue mi intención menospreciar el trabajo de Mauricio, al contrario.
Solo que por mis razones (y las he aclarado), preferí no utilizar el EasyDev.
Tampoco es mi intención ofender a nadie de este foro, (no creo haberlo hecho).
Hecha la aclaración, te agradezco la respuesta y voy a probar lo que dices!!!
No veo la hora de hacerlo, pero solo le puedo dedicar tiempo por las noches.
Gracias nuevamente!
Apache OpenOffice 4.1.2.
Windows 7
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Seleccionar celdas visibles

Mensaje por fornelasa »

Jorge, digamos que aproveché tu mensaje para lanzar una "curva" pero de manera muy muy general y nada en particular, por supuesto que has actuado correctamente.
Con respecto a la consulta, ok bien, esperemos a ver que resulta una vez que lo hayas revisado.
Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
JorgeSanti
Mensajes: 23
Registrado: Dom Abr 10, 2016 7:36 pm

Re: Seleccionar celdas visibles

Mensaje por JorgeSanti »

Segun las pruebas que pude hacer, luego del filtrado, la selección continua siendo la misma que antes del filtrado.
No se modifica. Si antes estaba seleccionada una celda, sigue la misma, y si era un rango, igual.
Lo probé ejecutando la macro desde un boton en la misma hoja que se filtra.
Y luego del filtrado asigne

Código: Seleccionar todo

oSel = ThisComponent.getCurrentSelection()

sTColumn = oSel.getRangeAddress.StartColumn
EnColumn = oSel.getRangeAddress.EndColumn
sTRow = oSel.getRangeAddress.StartRow
EnRow = oSel.getRangeAddress.EndRow

MsgBox  sTColumn
MsgBox EnColumn
MsgBox sTRow
MsgBox EnRow 
Si la seleccion antes del filtrado, como consecuencia del mismo queda en filas ocultas, me da error "propiedad o metodo no encontrado en getRangeAddress"
Si la seleccion anterior quedara en filas visibles, me da los datos pedidos.
Pero no me dio el nuevo rango visible.
Seguiré con lo que me pasó Mauricio. . .
Saludos a todos.
Apache OpenOffice 4.1.2.
Windows 7
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Seleccionar celdas visibles

Mensaje por mauricio »

Solo lee hasta el final el vínculo que te pase...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
JorgeSanti
Mensajes: 23
Registrado: Dom Abr 10, 2016 7:36 pm

Re: Seleccionar celdas visibles

Mensaje por JorgeSanti »

Anoche llegue al final . . .
Ya encontré lo que necesitaba!!!!
Gracias!!!!
Lo veo bien, y paso la solucion, antes de cerrar el tema. Puede ser??
Saludos a todos.
Apache OpenOffice 4.1.2.
Windows 7
JorgeSanti
Mensajes: 23
Registrado: Dom Abr 10, 2016 7:36 pm

Re: Seleccionar celdas visibles

Mensaje por JorgeSanti »

Bien, no fue tan facil como pensaba cuando Mauricio me paso la solución!!
Me costó hacer referencia al rango de oVisibles, pues en conocimiento que del filtrado obtenia siempre filas consecutivas, pensé que iba a devolver un Rango. Y a pesar que efectivamente era un Rango, y así me lo mostraba al hacer DireccionRango, pero no.
Resulta que al hacer ImplementationName me devuelve "ScCellRangesObj" o sea rangos multiples. (Alguien tiene idea por que??)
Así que no tuve mas remedio, y lo tratamos como multiples rangos, (aunque siempre fue uno) y lo hice segun CopiarSoloVisibles del libro de Mauricio.
Como no querìa copiar todo el Rango de Visibles, sino solo algunas columnas, saque la primera fila y la ultima y defini nuevo rango de origen de copia.
A continuación como quedó. Solo para que quede por si alguien necesita lo mismo.
Solo parte pertinente.

Código: Seleccionar todo

Call FiltrarDatos()

     oHojaDestino = ThisComponent.Sheets.getByName( "Recibo" )
     oHojaActiva = ThisComponent.getCurrentController().getActiveSheet()
     oRBD = oHojaActiva.getCellRangeByName("Registros")
     'Buscamos las celdas visibles
     oVisibles = oRBD.queryVisibleCells()
     
If oVisibles.getCount = 0 Then
         MsgBox "No hay celdas ocultas"
Else
        mDir = oVisibles.getRangeAddresses()
        For Col = LBound( mDir ) To UBound( mDir )
        oOrigen = mDir(Col )
        DesdeFila = oOrigen.StartRow
        HastaFila = oOrigen.EndRow
		MsgBox DesdeFila & " - " & HastaFila  ' solo para ver si esta ok!!
		oSel = oHojaActiva.getCellRangeByPosition( 3,DesdeFila,8,HastaFila ) ' Nuevo Rango origen
		oDestino = oHojaDestino.getCellRangeByName( "A20" )
		oHojaActiva.copyRange( oDestino.getCellAddress, oSel.getRangeAddress ) ' copio Datos en Recibos
		Next 
End If  
Gracias, por todo.
Apache OpenOffice 4.1.2.
Windows 7
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Seleccionar celdas visibles

Mensaje por mauricio »

Por que así esta implementado en el API, como desarrollador me parece lógico, "generalmente", al tratar de obtener las celdas solo visibles, es por que se tiene un filtro, entonces, los rangos pueden ser, de nuevo, "generalmente", varios...

Por favor, mira, la forma correcta de marcar como resuelto un tema... ahora lo hago por ti, procura hacerlo tu en un futuro.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
JorgeSanti
Mensajes: 23
Registrado: Dom Abr 10, 2016 7:36 pm

Re: [RESUELTO] Seleccionar celdas visibles

Mensaje por JorgeSanti »

No me has dado tiempo!!!!
Entre a ver la Guia de Supervivencia, despues de contestar y cuando volví ya estaba arreglado!!!!
Ya que era mi primer posteo, podrías haberme dado 10 minutos!!! jaja.
Gracias, por la aclaración.
Slds.
Apache OpenOffice 4.1.2.
Windows 7
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Seleccionar celdas visibles

Mensaje por mauricio »

Después de tantos años es la inercia... jajaja
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder