seleccionar celdas visibles

Discute sobre la aplicación de hojas de cálculo

seleccionar celdas visibles

Notapor javierar » Mar Jul 07, 2009 12:34 am

Estimados, estoy buscando si existe alguna manera de seleccionar las celdas visibles, ya que necesito seleccionar sólo unas filas resultado de una operacion de subtotales. Pero me selecciona todos los datos intermedios, en excel hay un comando de "select visible cells".
javierar
 
Mensajes: 4
Registrado: Mar Jun 23, 2009 12:42 am

Re: seleccionar celdas visibles

Notapor Néstor Londoño B. » Mar Jul 07, 2009 5:37 am

Saludos: No entiendo lo que Ud. desea, pero si lo que quiere es ocultar columnas para que no se vean ni se impriman. solo seleccionelas desde la letra de Id. de la columna(s) y en Formato Columna Ocultar; gual para ocultar filas. Espero que sea su respuesta correcta.
Para volver a la hoja normal, se conoce que existen columnas ocultas por que la letra distintiva no aparece, salta por ejemplo de A a D, Click en la esquina superior izquierda de la tabla y Formato Columna Mostrar.
Néstor
S,O. Ubuntu 15 AOO_4.0.1
Néstor Londoño B.
 
Mensajes: 261
Registrado: Lun Dic 01, 2008 7:59 am
Ubicación: Pereira, Colombia

Re: seleccionar celdas visibles

Notapor javierar » Mar Jul 07, 2009 2:41 pm

No el problema es que cuando oculto filas con la operación de subtotales, quiero seleccionar sólo los subtotales para copiarlos en otro lugar, me selecciona todos los datos, no únicamente los subtotales. También pasa si oculto filas, si quiero seleccionar sólo las filas visibles para copiarlas en otro lugar me copia todas hasta las que no están visibles. En excel hay un comando para esto que "select visible"
javierar
 
Mensajes: 4
Registrado: Mar Jun 23, 2009 12:42 am

Re: seleccionar celdas visibles

Notapor Néstor Londoño B. » Mié Jul 08, 2009 6:09 am

Saludo: Este problema lo he subsanado con el el uso de "Pegado Especial". Acabo de hacer el ensayo de ejecutar una columna con el cálculo del IVA =Valor * ,16 y escogiendo en pegado especial números y formato la ha copiado toda, Atentamente,
Néstor
S,O. Ubuntu 15 AOO_4.0.1
Néstor Londoño B.
 
Mensajes: 261
Registrado: Lun Dic 01, 2008 7:59 am
Ubicación: Pereira, Colombia

Re: seleccionar celdas visibles

Notapor mriosv » Sab Jul 11, 2009 6:47 pm

Cuando se utilizan subtotales aparece el marco de esquema con el '-' para ver solo los subtotales o el '+' para ver todos los datos.
Si picas en el '-' para ver solo los subtotales y después utilizar el mandato copiar, solo copia las celdas visibles.
Puedes usar "Subir adjunto" en Respuesta rápida - Editor Completo - Pestaña Subir adjunto
Apache OpenOffice 4, LibreOffice 5 (Win10x64)
mriosv
 
Mensajes: 2186
Registrado: Sab Dic 27, 2008 1:12 am
Ubicación: Galiza (España)

Re: seleccionar celdas visibles

Notapor hhmartinezlopez » Jue Ago 06, 2009 11:51 pm

En excel una vez que se tienen los subtotales se contrae la vista y me permite ordenar en base a los subtotales. Un Ejemplo de su utilidad es cuando me piden los 30 o 50 principlaes clientes. Con subtotales obtengo el total por cliente, pero no puedo ir mas alla, ordenarlos de mayor a menor, es decir, trabajar solo con las celdas visibles. Ya existe una solicitud para que se incluya en una version posterior, la Issue 70873, hay que votar por ella. Por lo pronto lo que yo hago es copiar y pegar especial (excepto formulas) sobre los mismos datos, luego ordeno en base a una columna que no haya totalizado. En los ultimos renglones quedaran mis lineas de subtotales.
OpenOffice 3.1 en Windows XP Pro SP2
hhmartinezlopez
 
Mensajes: 1
Registrado: Jue Ago 06, 2009 11:33 pm

Re: seleccionar celdas visibles

Notapor mauricio » Vie Ago 07, 2009 9:33 am

Calc no cuenta (no conozco), una herramienta para seleccionar solo las celdas visibles, pero es trivial implementar una macro que lo haga, por ejemplo:

Código: Seleccionar todo   Expandir vistaContraer vista
Sub SeleccionarSoloCeldasVisibles()
Dim oSel As Object
Dim oCursor As Object
Dim oVisibles As Object

   'Obtenemos la selección
   oSel = ThisComponent.getCurrentSelection()
   'Si es una sola celda
   If oSel.getImplementationName = "ScCellObj" Then
      'Creamos un cursor
      oCursor = oSel.getSpreadSheet.createCursorByRange( oSel )
      'Expandimos el cursor a la region actual
        oCursor.collapseToCurrentRegion()
        'Dejamos solo las celdas visibles
      oVisibles = oCursor.queryVisibleCells()
      If oVisibles.getCount = 0 Then
         MsgBox "No hay celdas ocultas"
      Else
         'Si hay las seleccionamos
         ThisComponent.getCurrentController.select( oVisibles )
      End If   
   End If
End Sub


Posicionen su cursor en "solo una" celda del rango con celdas ocultas, la macro expandirá el rango a la región actual y seleccionará solo las celdas visibles, si las hay. Pero, dicen que siempre hay un pero, intenten copiar la selección, les mostrará un "horrible" mensaje de que no se puede, así que, volvemos a hacer uso de OOo Basic para que nos ayude. Para copiar un rango en otro lado, usamos el método copyRange de la siguiente manera:

Código: Seleccionar todo   Expandir vistaContraer vista
Sub CopiarRangos1()
Dim oHojaActiva As Object
Dim oOrigen As Object
Dim oDestino As Object

   oHojaActiva = ThisComponent.getCurrentController().getActiveSheet()
   'Rango a copiar
   oOrigen = oHojaActiva.getCellRangeByName( "A1:B3" )
   'Celda destino
   oDestino = oHojaActiva.getCellRangeByName( "D10" )

   'Copiamos el rango
   oHojaActiva.copyRange( oDestino.getCellAddress(), oOrigen.getRangeAddress() )

End Sub


Pero, otra vez el pero, el método queryVisibleCells, siempre nos devuelve un conjunto de rangos de celdas, por lo que tenemos que "iterar" entre ellos y copiar cada rango del conjunto, para conocer un poco del manejo de rangos de celdas, les copio parte de mis apuntes:

Cuando en la interfaz del usuario, hacemos la selección de un rango y mantenemos presionada la tecla Ctrl y hacemos un segunda selección de un rango y así sucesivamente, estamos hablando de un conjunto de rangos que tiene sus características particulares para su control y manejo. Para seleccionar varios rangos desde código, primero debemos crear el “contenedor” de estos rangos, veamos como:

Código: Seleccionar todo   Expandir vistaContraer vista
Sub Acceso_A_Rangos1()
Dim oHojaActiva As Object
Dim oRangos As Object
Dim oRango As Object
Dim oDirRango As Object

        oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()       
        'Creamos el contender para los rangos
        oRangos = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")

        'Creamos la estructura CellRangeAddress necesaria
        oDirRango = oHojaActiva.getCellRangeByName( "A1:B2" ).getRangeAddress()
        'Y lo agregamos al contenedor de rangos
        oRangos.addRangeAddress( oDirRango ,False )

        'Aquí solo hacemos referencia al rango 
        oRango = oHojaActiva.getCellRangeByName( "E1:G2" )
        'Y lo agregamos al contenedor de rangos, nota como tenemos que usar
        'el método getRangeAddress para pasarle el argumento correcto
        oRangos.addRangeAddress( oRango.getRangeAddress() ,False )
       
        'Aquí agregamos un rango directamente al contenedor
        'toma en cuenta que se van acumulando
        oRangos.addRangeAddress( oHojaActiva.getCellRangeByName( "D4:E5" ).getRangeAddress() ,False )

        'Comprobamos que están correctos seleccionándolos
        ThisComponent.getCurrentController.select(oRangos)

End Sub


No te confundas, los tres líneas donde se agrega el rango con el método addRangeAddress() son iguales, lo que cambia es la forma en que hacemos referencia a la dirección del rango, si vas empezando a programar, te recomiendo ir desglosando cada línea, con el tiempo y la experiencia, podrás concentrar código de forma más natural, por ahora, usa todas las líneas que consideres pertinentes para que tu código lo entiendas con solo verlo.
Por supuesto, también de estos rangos podemos obtener información, por ejemplo, los nombres de los rangos que contiene:

Código: Seleccionar todo   Expandir vistaContraer vista
Sub Acceso_A_Rangos2()
Dim oHojaActiva As Object
Dim oRangos As Object

   oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()       
   'Creamos el contender para los rangos
   oRangos = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")

   'Agregamos los rangos que queramos
   oRangos.addRangeAddress( oHojaActiva.getCellRangeByName( "A1:A2" ).getRangeAddress() ,False )
   oRangos.addRangeAddress( oHojaActiva.getCellRangeByName( "B4:B5" ).getRangeAddress() ,False )
   oRangos.addRangeAddress( oHojaActiva.getCellRangeByName( "C7:C8" ).getRangeAddress() ,False )
   oRangos.addRangeAddress( oHojaActiva.getCellRangeByName( "D10:D11" ).getRangeAddress() ,False )
   oRangos.addRangeAddress( oHojaActiva.getCellRangeByName( "E13:E14" ).getRangeAddress() ,False )
       
   'Mostramos las direcciones de los rangos
   MsgBox oRangos.getRangeAddressesAsString()

End Sub


Para finalizar, solo resta poner a trabajar estos tres nuevos conocimientos para lograr copiar las celdas visibles de un conjunto de rangos, pero, esa es su tarea...

Saludos a todos...

Mauricio
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5934
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: seleccionar celdas visibles

Notapor mauricio » Sab Ago 08, 2009 5:49 am

¿que paso compañeros, hicieron la tarea?, espero que si, si no, podemos discutir en el foro de macros acerca de este tema, los invito a particiar

Macro para copiar solo celdas visibles
http://user.services.openoffice.org/es/forum/viewtopic.php?f=50&t=1627

Saludos

Mauricio
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5934
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX


Volver a Calc

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 18 invitados