Página 1 de 1

Extension para resaltar fila y/o columna activa

NotaPublicado: Dom Oct 27, 2013 6:01 am
por rojes
Hola quiero proponer a la comunidad de Openoffice y Libreoffice la creación de una extension que agregue la funcionalidad opcional a Openoffice y Libreoffice, de resaltar la fila y/o la columna activa, de tal forma que nuestra ofimatica adquiera una caracteristica adicional que le permita a sus usuarios ubicar mejor concordancia y ubicación de de valores, en aquellas hojas con demasiadas filas y/o columnas de datos. Esto permitiría trabajar de manera mas comoda y eficiente, a mi juicio más ergonómica.

Agradezco a todos aquellos con mucho más conocimiento que YO al respecto, aportar su grano de arena a fin de que este proyecto salga adelante.

Como comienzo, propongo una macro desarrollada por Mauricio: http://forum.openoffice.org/es/forum/download/file.php?id=4168

Como procedimientos iniciales para el desarrollo de esta extension, propongo la sugerencia aportada por Federico.

1) Agregar por codigo los dos rectangulos a la hoja que desee usarse, si la hoja ya tienes imagenes iniciales entonces tendria que ver por codigo que numero de indice tienen los rectangulos agregados y trabajar sobre esos indices o nombres.
2) Desde codigo tendria que asignar la macro al evento "al cambiar la seleccion" de la hoja en uso.
3) Tendria que ver desde codigo si la hoja de aplicacion es la Hoja1 o la Hoja2 o la Hoja3 o la HojaN
4) Tendria que ver si tal vez en un libro no deseas aplicar esa caracteristica.


Gracias a todos los interesados

Roberto

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Dom Oct 27, 2013 1:21 pm
por SLV-es
Me encanta la idea de la extensión, pero no nos quedemos ahí.

Creo que es una excelente idea, y propongo que eleves la petición a la web de Bugzilla para AOO donde se puede sugerir como mejora en Calc, y donde podemos votarla.

Si no sabes cómo redactar la petición en inglés, redáctala aquí en castellano y te ayudarán a traducirla.

Gracias

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Dom Oct 27, 2013 7:46 pm
por rojes
Me parece bien si podemos seguir adelante con el desarrollo de la extensión y a la par solicitar se incluya la característica en el código del programa.

Saludos,

Roberto

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Lun Oct 28, 2013 1:08 am
por RGB-es
Eso ya fue comentado en este tema: [Propuesta] Resaltar fila activa en calc donde se da un enlace a un pedido ya existente.

Mientras se implementa, se puede ir empaquetando la extensión. Quizás podría irse comentando en el reporte que la macro existe ;)

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Lun Oct 28, 2013 4:08 am
por SLV-es
Hay que ver como tengo la cabeza...
Si incluso lo voté !!! :lol: :lol: :lol:

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Lun Oct 28, 2013 5:19 am
por xiseme
Mientras llegan los más expertos, unas macros (huelga decir que mejorables) basadas en la de Mauricio que
- Si le pasamos un rango de celdas resaltará fila/columna solo en ese área
- Si no se le pasa, ninguno asume el área con datos
- cuando se selecciona celda fuera del área quita el resalte.

En mis pruebas es funcional aunque además de pulir el código, echo en falta
- enviar el dibujo-formas al fondo de la hoja Mauricio dió la solución
- poder llamarlos por su nombre en vez de por su índice.
Código: Seleccionar todo   Expandir vistaContraer vista
Sub Resalta
'Asignar una macro al evento «Al cambiar selección» de la hoja llamando a la subrutina/función ResaltarXY

ResaltarXY("RangoT")  '→ Un rango con nombre
' ResaltarXY("C7:N77")  '→ dirección de rango de celdas
' ResaltarXY("")      '→ Cadena vacía → hasta última celda con datos
' ResaltarXY()         '→ ausente → hasta última celda con datos
End Sub

'______________________________________________________________
Sub ResaltarXY(Optional nRango)
'Parámetros: nombre de un rango "MiNombreDeRango" o "A1:AA50000" o "Hoja.A1:$G$55"
'Resalta fila y columna en el rango, cuando se selecciona una de sus celdas
'Requisitos: han de crearse dos rectángulos en la hoja del rango
'si no se le pasa como nombre de rango/"" asume el área con datos de la hoja
'Poner en «Mis Macros» para que pueda ser llamada desde cualquier hoja

On Error GoTo Salir
Dim oDoc As Object
Dim oControlador As Object
Dim oCursor As Object
Dim oSel As Object
Dim oDP As Object
Dim shape1 As Object
Dim shape2 As Object
Dim pos
Dim size
Dim Ancho
Dim Alto
Dim RResalt
Dim FilaSel
Dim ColSel
Dim oDib As Object
Dim i As Integer
Dim ETQ As String
   ETQ= "BarraResaltar"


   oDoc = ThisComponent
   oControlador = oDoc.CurrentController
   oSel = oControlador.Selection
   
   If Not (oSel.ImplementationName = "ScCellObj") Then 'Si la seleccion no es una celda nos vamos
      GoTo Fin
   End If

   oDP = oSel.getSpreadSheet().getDrawPage()
   
'si la celda seleccionada no está en rango → quitar dibujos del resalte solamente y salir
   ColSel = oSel.getRangeAddress.StartColumn
   FilaSel = oSel.getRangeAddress.StartRow

   If IsMissing(nRango) or nRango="" Then
      oCursor = oSel.getSpreadSheet.createCursorByRange(oSel)
      oCursor.gotoEndOfUsedArea( False )
       nRango= Replace(oCursor.AbsoluteName, ".",  ".A1:")
   End If
   RResalt = oControlador.ActiveSheet.getCellRangeByName(nRango)      
   If ColSel > RResalt.getRangeAddress.EndColumn Or ColSel < RResalt.getRangeAddress.StartColumn Or _
      FilaSel > RResalt.getRangeAddress.EndRow Or FilaSel < RResalt.getRangeAddress.StartRow Then
      For i= (oDP.getCount - 1) To 0 Step -1
         oDib = oDP.getByIndex(i)
         If oDib.Name = ETQ & "Columna" Or oDib.Name = ETQ & "Fila" Then
            oDP.Remove(oDib)
         End If
      Next
      GoTo Fin
   Else
      'Estamos en el área → crear dibujos si no están creados   
      Dim index1, index2 As Integer
      For i=0 To oDP.getCount - 1
         oDib = oDP.getByIndex(i)
         If  oDib.Name  = ETQ & "Columna" Then
            index1 = i
         ElseIf  oDib.Name  = ETQ & "Fila" Then
            index2 = i   
         End If
      Next
      If index2 <1 Then   
         DibForma(5000, 300, ETQ & "Columna")
         DibForma(500, 3000, ETQ & "Fila")
      End If   
   End If

   oCursor = RResalt.getSpreadSheet.createCursorByRange(RResalt)
   Ancho = oCursor.Size.Width
   Alto = oCursor.Size.Height   
   oCursor.gotoEndOfUsedArea( False )

   shape1 = oDP.getByIndex(oDP.getCount - 1) ' esto supone que no se deben crear dibujos ...
   shape2 = oDP.getByIndex(oDP.getCount - 2) ' ... con celda seleccionada en area de resaltado
   
   pos = oSel.Position
   size = oSel.Size
   size.Width = Ancho

   pos.X = RResalt.Position.X
   shape1.setPosition(pos)
   shape1.setSize(size)
   
   pos = oSel.Position
   size = oSel.Size   
   size.Height = Alto
   
   pos.Y =  RResalt.Position.Y
   shape2.setPosition(pos)
   shape2.setSize(size)
Fin:
   Exit Sub
Salir:
   MsgBox " Ummmm ... error!" & Chr(13) & "¿Es correcto el nombre del rango?",, "Aviso"
End Sub 

'--------------------------------------------------------------------------------
Sub DibForma(Ancho As Long, Alto As Long, nDib As String, Optional TipoForma As String)
'Crea un dibujo en la hoja activa desde la que es llamada
'Poner en «Mis macros» para que sea accesible siempre.
Dim oPaginaDibujo As Object
Dim oForma As Object
Dim oTam As New com.sun.star.awt.Size

     oPaginaDibujo = ThisComponent.getCurrentController.getActiveSheet.getDrawPage()
     If IsMissing(TipoForma) Then TipoForma = "RectangleShape"
     oForma = ThisComponent.createInstance("com.sun.star.drawing." & TipoForma) 'RectangleShape")

     oTam.Width= Ancho
     oTam.Height= Alto

     With oForma
   .LineStyle = com.sun.star.drawing.LineStyle.NONE
   .FillColor = RGB( 75,75,75 )
   .FillTransparence = 85
        .setSize (oTam)   
        .LayerID = 1
   .Name = nDib
     End With

     oPaginaDibujo.Add( oForma )

End Sub
ResaltadoDeFilaColumaEnArea.ods
(12.16 KiB) 333 veces

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Mar Oct 29, 2013 5:17 pm
por rojes
Agradecería si me pueden decir como votar por la petición de Resaltado de fila y columna activa y proponer por la modificación de que sea Resaltado opcional de fila y/o columna activa.

No obstante sigo esperanzado en que se logre el desarrollo de la extensión propuesta como solución provisional, que muestre tanto a los usuarios, como a los desarrolladores del proyecto A. openoffice y Libreoffice, lo importante de esta propuesta.

Por ultimo conmino a todos los usuarios de las dos ofimáticas libres a votar masivamente esta petición que redundara en el robustecimiento de ellas.

Saludos,

Roberto

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Mar Oct 29, 2013 9:42 pm
por SLV-es
Accede a esta página https://issues.apache.org/ooo/show_bug.cgi?id=116489
Date de alta
Luego podrás votar: 2 puntos máximo por cada tema, y un máximo de 5 para cada aplicación (5 para writer, 5 para calc, etc)
Saludos

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Mié Oct 30, 2013 4:50 am
por rojes
Ya di 2 votos, la propuesta solo tiene 3 votos, invito a todos los que como yo requerimos de esta característica en nuestra ofimática, se que hay muchos que no han votado porque no han comprendido lo importante de esta petición, comiencen a utilizar una de las distintas macros propuestas y notaran el descanso en la vista.

Espero aportes para la extensión.

Saludos,

Roberto

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Mié Oct 30, 2013 5:13 pm
por SLV-es
Aprovecha y vota por otros temas que consideres interesantes. Tienes 5 votos para Calc en total, pero tienes otros 5 para cada una de los otras aplicaciones :)

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Jue Oct 31, 2013 2:35 am
por xiseme
No es una extensión, pero en el adjunto está la macro «ResaltarXY()» que hace "dignamente" tarea de resaltar fila+columna. El código sigue la pautas de mriosv y mauricio, como no soy programador no es muy limpio; aún así creo que se entenderá.
ResaltadoDeFilaColumaPruebas.ods
(46.06 KiB) 328 veces

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Vie Nov 01, 2013 12:58 am
por mriosv
Xiseme, se ve muy bien la idea de limitarlo al área con datos. :idea:

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Mié Nov 06, 2013 5:29 am
por rojes
Quisiera saber a cuanto tiempo se cierra un tema por inactividad. Espero que eso no le suceda a este.

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Mié Nov 06, 2013 3:52 pm
por mauricio
Pocos temas en este foro se han cerrado, la inactividad NO es uno de ellos, temas bastante viejos se siguen consultando y ampliando por tener referencias validas... lo que quiero decir es que mientras haya alguien interesado en ver y agregar información, los temas siguien abiertos, solo se cierran en casos graves de faltas a las normas de este foro o en otros raros casos...

Saludos

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Lun Nov 11, 2013 12:31 am
por mauricio
mriosv escribió:Xiseme, se ve muy bien la idea de limitarlo al área con datos. :idea:

Así funciona la primer versión, pero esto no funciona muy bien cuando se tienen las ventanas divididas o inmovilizadas...

Saludos

Re: Extension para resaltar fila y/o columna activa

NotaPublicado: Lun Nov 11, 2013 2:06 am
por xiseme
He probado en este fichero con ventanas divididas/inmovilizadas y 10000 filas (se hace pesado y tengo que ponerlo en servidor externo :D )
http://www.mediafire.com/download/qct2b ... ltarXY.ods
Aunque lo he probado solo someramente, no he notado problemas.
Bueno, que la macro que he llamado aquí ResaltadoXY no debe ejecutarse directamente (error 380) sino que debe ser llamada por la que se asigne al evento, pero eso es en todos los caso con o sin fijar/inmovilizar ventanas.

Nota: En esta versión se resaltan la(s) fila(s) y columna(s) cuando la selección es una celda o un rango contiguo de celdas (no sé si aporta mucha utilidad pero como cuesta tan poco ... :mrgreen: )