seleccionar celdas visibles

Discute sobre la aplicación de hojas de cálculo
Responder
javierar
Mensajes: 4
Registrado: Mar Jun 23, 2009 12:42 am

seleccionar celdas visibles

Mensaje por javierar »

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".
Néstor Londoño B.
Mensajes: 261
Registrado: Lun Dic 01, 2008 7:59 am
Ubicación: Pereira, Colombia

Re: seleccionar celdas visibles

Mensaje por Néstor Londoño B. »

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
javierar
Mensajes: 4
Registrado: Mar Jun 23, 2009 12:42 am

Re: seleccionar celdas visibles

Mensaje por javierar »

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"
Néstor Londoño B.
Mensajes: 261
Registrado: Lun Dic 01, 2008 7:59 am
Ubicación: Pereira, Colombia

Re: seleccionar celdas visibles

Mensaje por Néstor Londoño B. »

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
mriosv
Mensajes: 2334
Registrado: Sab Dic 27, 2008 1:12 am
Ubicación: Galiza (España)

Re: seleccionar celdas visibles

Mensaje por mriosv »

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 (Win10x64)
hhmartinezlopez
Mensajes: 1
Registrado: Jue Ago 06, 2009 11:33 pm

Re: seleccionar celdas visibles

Mensaje por hhmartinezlopez »

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
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 »

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

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

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

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

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: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: seleccionar celdas visibles

Mensaje por mauricio »

¿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/ ... =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
Responder