Configuración global de Calc
En este capitulo, veremos algunas opciones que afectan a la configuración global de Calc, por ejemplo, lo que queremos ver y lo que no.
Sub ConfigurarCalc1() Dim oDoc As Object Dim oCC As Object oDoc = ThisComponent oCC = oDoc.getCurrentController() 'Mostramos las formulas en vez de su resultado 'el valor "normal" es falso (False) oCC.showFormulas = True 'Ocultamos los valores cero 'el valor normal es verdadero (True) oCC.showZeroValues = False 'Podemos automáticamente diferenciar los valores de 'formulas con esta propiedad, los valores los pone 'en azul y las formulas en verde, pero ten cuidado 'no podrás establecer el color de fuente mientras 'esta propiedad este en verdadera (True) oCC.IsValueHighlightingEnabled = True 'Esta propiedad, solo oculta el pequeño cuadro rojo 'que nos indica que una celda tiene una nota, la nota 'sigue existiendo, establecelo en verdadero para volver 'a ver este pequeño cuadro oCC.showNotes = False End Sub
También podemos mostrar u ocultar otros elementos de la hoja de calculo, en todos los ejemplos siguientes, alternamos el valor de las propiedades, es decir, si están visibles se ocultan y viceversa:
Sub ConfigurarCalc2() Dim oDoc As Object Dim oCC As Object oDoc = ThisComponent oCC = oDoc.getCurrentController() 'Ocultamos o mostramos las barras de desplazamiento 'tanto vertical como horizontal oCC.HasVerticalScrollBar = Not oCC.HasVerticalScrollBar oCC.HasHorizontalScrollBar = Not oCC.HasHorizontalScrollBar 'Las etiqueas de las hojas oCC.HasSheetTabs = Not oCC.HasSheetTabs 'Los encabezados de filas y columnas oCC.HasColumnRowHeaders = Not oCC.HasColumnRowHeaders 'Las líneas de división de las celdas oCC.showGrid = Not oCC.showGrid 'Las líneas de ayuda cuando se mueve un objeto gráfico oCC.showHelpLines = Not oCC.ShowHelpLines 'El icono de anclaje cuando se selecciona un objeto gráfico oCC.showAnchor = Not oCC.ShowAnchor 'Los saltos de página oCC.showPageBreaks = Not oCC.ShowPageBreaks 'Los objetos e imagenes oCC.showObjects = Not oCC.showObjects 'Los gráficos oCC.showCharts = Not oCC.showCharts 'Las formas oCC.showDrawing = Not oCC.showDrawing 'Los símbolos de esquema y agrupamiento oCC.IsOutlineSymbolsSet = Not oCC.IsOutlineSymbolsSet End Sub
Ten cuidado con ocultar algunos elementos, por ejemplo, si ocultas las etiquetas de las hojas, el usuario puede cambiarse aun con la combinación de teclas CTRL+RePag (AvPag), los saltos de página se ocultan, pero siguen existiendo, así como los gráficos, objetos, formas y símbolos de esquema. En el siguiente ejemplo, cambiamos el color de las líneas de división de las celdas y establecemos el zoom con un porcentaje.
Sub ConfigurarCalc3() Dim oDoc As Object Dim oCC As Object oDoc = ThisComponent oCC = oDoc.getCurrentController() 'Puedes cambiar el color de las líneas de división de celdas 'el valor predeterminado es gris claro = 12632256 oCC.gridColor = RGB(Rnd()*255,Rnd()*255,Rnd()*255) 'Establecer el tipo de Zoom ' 1 = Ancho de página ' 2 = Ajustar al ancho y alto ' 3 = Valor oCC.ZoomType = 3 'Si lo establece en 3 (valor), puedes establecer 'el porcentaje de zoom entre 20% y 400% oCC.ZoomValue = 130 End Sub
Si estableces el porcentaje fuera de sus limites (20% a 400%), este se ajustará al más cercano. Las siguientes propiedades, solo tiene efecto sobre una sola hoja, pero me parece que son interesantes de ver. Podemos consultar y establecer la primer fila y columna visible.
Sub ConfigurarCalc4() Dim oDoc As Object Dim oCC As Object oDoc = ThisComponent oCC = oDoc.getCurrentController() 'La primer fila y columna visible actuales MsgBox "Fila: " & oCC.getFirstVisibleRow & Chr(13) & "Columna: " & oCC.getFirstVisibleColumn 'Lo interesante, es que podemos establecerlas para que el usuario 'vea lo que queramos que vea oCC.setFirstVisibleRow( 50 ) oCC.setFirstVisibleColumn( 10 ) End Sub
Podemos obtener el rango visible, como mostramos en el ejemplo, este rango se ve afectado por el nivel de zoom establecido en la hoja.
Sub ConfigurarCalc5() Dim oDoc As Object Dim oCC As Object Dim oRangoVisible As Object oDoc = ThisComponent oCC = oDoc.getCurrentController() 'Obtenemos el rango visible oRangoVisible = oCC.getVisibleRange() 'Mostramos su dirección MsgBox DireccionRango( oRangoVisible ) 'Cambiamos el zoom oCC.ZoomType = 3 oCC.ZoomValue = oCC.ZoomValue + 25 'Volvemos a consultar el rango visible oRangoVisible = oCC.getVisibleRange() MsgBox DireccionRango( oRangoVisible ) End Sub Function DireccionRango( DirRango As Object) As String Dim oHA As Object Dim sTmp As String oHA = ThisComponent.getCurrentController.getActiveSheet sTmp = oHA.getColumns.getByIndex(DirRango.StartColumn).getName() & _ DirRango.StartRow + 1 & ":" & _ oHA.getColumns.getByIndex(DirRango.EndColumn).getName() & _ DirRango.EndRow + 1 DireccionRango = sTmp End Function
Podemos saber si la ventana esta dividida.
Sub ConfigurarCalc6() Dim oDoc As Object Dim oCC As Object Dim sInfo As String oDoc = ThisComponent oCC = oDoc.getCurrentController() 'Consultamos si la ventana esta dividida If oCC.getIsWindowSplit Then 'Mostramos la información sInfo = "La ventana esta dividida a: " & Chr(13) & _ oCC.getSplitHorizontal & " pixeles de la izquierda y" & Chr(13) & _ oCC.getSplitVertical & " pixeles de la parte superior" & Chr(13) & _ "En la columna: " & oCC.getSplitColumn & " y en la fila: " & oCC.getSplitRow MsgBox sInfo Else MsgBox "La ventana no esta dividida" End If End Sub
Por supuesto podemos establecer la división donde quieras.
Sub ConfigurarCalc7() Dim oDoc As Object Dim oCC As Object Dim sInfo As String oDoc = ThisComponent oCC = oDoc.getCurrentController() 'Si no esta dividida la dividimos If Not oCC.getIsWindowSplit Then 'Las unidades son pixeles oCC.splitAtPosition( 500,300 ) End If End Sub
Si quieres establecer solo una división, establece la que no quieras en cero, por ejemplo, si solo quieres la división vertical usas.
oCC.splitAtPosition( 500,0 )
Para la horizontal.
oCC.splitAtPosition( 0,300 )
Para eliminar la división.
oCC.splitAtPosition( 0,0 )
También podemos saber si la ventana esta fija.
Sub ConfigurarCalc8() Dim oDoc As Object Dim oCC As Object Dim sInfo As String oDoc = ThisComponent oCC = oDoc.getCurrentController() 'Consultamos si la ventana esta fija If oCC.hasFrozenPanes Then MsgBox "La ventana esta fija" Else MsgBox "La ventana no esta fija" End If End Sub
Y establecer la posición de esta, aquí se usa la columna y fila deseada.
Sub ConfigurarCalc9() Dim oDoc As Object Dim oCC As Object Dim sInfo As String oDoc = ThisComponent oCC = oDoc.getCurrentController() 'Establecemos la división en la columna 5 y fila 10 oCC.freezeAtPosition( 5, 10) End Sub
Al igual que con la ventana dividida, si quiere establecer solo un sentido, establece el otro en cero, si estableces los dos argumentos en ceros, no eliminaras la división, si que la ventana se fijara en la posición actual del cursor de celda.
oCC.freezeAtPosition( 0, 0)
Si quieres quitarla, usa el mismo método visto anteriormente.
oCC.splitAtPosition( 0,0 )
Si divides la ventana por cualquiera de los dos métodos vistos, estás pueden tener 2 o cuatro partes, cada una de estas partes se llama panel, y puedes tener acceso a cada rango de cada panel, como se muestra en el siguiente ejemplo.
Sub ConfigurarCalc10() Dim oDoc As Object Dim oCC As Object Dim oPanel As Object Dim co1 As Byte Dim sInfo As String oDoc = ThisComponent oCC = oDoc.getCurrentController() 'La ventans debe estar fija o dividida If oCC.getIsWindowSplit Or oCC.hasFrozenPanes Then For co1 = 0 To oCC.getCount - 1 'Obtenemos acceso a cada panel oPanel = oCC.getByIndex( co1 ) 'Mostramos su dirección MsgBox "La dirección del Panel " & co1+1 & " es: " & DireccionRango2( oPanel.getReferredCells ) Next co1 End If End Sub Function DireccionRango2(Rango As Object) As String Dim sTmp As String Select Case Rango.getImplementationName() Case "ScCellObj" sTmp = Rango.getSpreadsheet.getName() & "." & _ Rango.getColumns().getByIndex(0).getName() & _ Rango.getCellAddress.Row + 1 Case "ScCellRangeObj", "ScCellCursorObj" sTmp = Rango.getSpreadsheet.getName() & "." & _ Rango.getColumns().getByIndex(0).getName() & _ Rango.getRangeAddress.StartRow + 1 & ":" & _ Rango.getColumns().getByIndex(Rango.getColumns().getCount()-1).getName() & _ Rango.getRangeAddress.EndRow + 1 Case "ScCellRangesObj" sTmp = Join( Split(Rango.getRangeAddressesAsString(),";"),Chr(13) ) End Select DireccionRango2 = sTmp End Function
La función anterior ya la hemos usado anteriormente, aquí la repetimos por si no la tienes a mano, y con esto damos por terminado un nuevo tema.
Si tienes dudas acerca de lo aquí explicado, tienes algún problema con AOO, o quieres ampliar la información, no dudes en dirigirte al Foro Oficial en español de Apache OpenOffice para Macros y API UNO |