AZLinux

Se muestran los artículos pertenecientes al tema openoffice.

16/02/2011

Macros OO III - Distribuir filas equitativamente

Descripción:

Modulo de macros de Writer (OpenOficce) que soluciona un error de interpretación en la opción Tabla -> Autoajustar -> Distribuir Filas Equitativamente.

En Word funcionaba de la siguiete manera: si seleccionas varias filas de diferente altura y eliges esta opción, no modifica la altura de la tabla y redistribuye el espacio equitativamente entre las filas seleccionadas. Sin embargo, con OpenOffice coge la altura de la fila más alta y lo aplica al resto.

Hay abierta una issue en http://qa.openoffice.org/issues/show_bug.cgi?id=58326 de la cual extraemos una macro alternativa que sustituye a la opción Distribuir Filas Equitativamente en OO.

Código

sub Distribute_Rows_Evenly
rem ----------------------------------------------------------------------
rem define variables
dim document as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent
controller = document.getCurrentController

’Get the current selection and check that part of a table has been selected
sel = controller.getSelection()
if sel.ImplementationName <> "SwXTextTableCursor" then exit sub
selRng = sel.RangeName

’Extract the rows from the selection name (in the form ’C24:G15’)
pos = 0
ascZero = Asc("0")
ascNine = Asc("9")
do ’Look for the first number
pos = pos + 1
ascVal = Asc(Mid(selRng, pos))
loop while (ascVal < ascZero or ascVal > ascNine)
startRowNum = CLng(Mid(selRng, pos)) - 1
do ’Look for the second number
pos = pos + 1
ascVal = Asc(Mid(selRng, pos))
loop while (ascVal < ascZero or ascVal > ascNine)
endRowNum = CLng(Mid(selRng, pos)) - 1

’Early-out if only one row selected
if startRowNum = endRowNum then exit sub

’Get the table
vcurs = controller.getViewCursor()
table = vcurs.TextTable
rows = table.getRows()

’Add up all the row heights
totalHeight = 0
for pos = startRowNum to endRowNum
totalHeight = totalHeight + rows(pos).Height
next

’Calculate the average row height
aveHeight = totalHeight / (endRowNum - startRowNum + 1)

’Set all the row heights to the average
for pos = startRowNum to endRowNum
rows(pos).IsAutoHeight = False
rows(pos).Height = aveHeight
next

end sub

16/02/2011 10:01 #. Tema: openoffice No hay comentarios. Comentar.

11/02/2011

Modificando una extension de OO

Numbertext es una extensión de OpenOffice que proporciona dos nuevas funciones para Calc: Numbertext y Moneytext que traducen un valor númerico en texto (Numbertext) o en texto moneda: X euros y X cents (Moneytext). El problema que nos comenta el usuario es que quiere que la función Moneytext, en vez de X euro/s y X cent/s, dé como resultado X euro/s con X céntimo/s

La extensión numbertext-version.oxt es un fichero comprimido que consta de una estructura de ficheros y directorios entre los que se encuentra el archivo numbertext_es_ES.py. Este fichero contiene el código python con las funciones de Calc y es el que hay que modificar de la siguiente manera:

  • La línea 87 cent por céntimo y cents por céntimos
  • Las líneas 117, 118 y 119 donde pone y por con.

Así de fácil!!

11/02/2011 12:27 #. Tema: openoffice No hay comentarios. Comentar.

10/02/2011

Macros OO II - Manejo de Columnas en Calc

Maneja columnas: Elimina, corta, pega e inserta columnas , inserta cabeceras hasta dar el formato apropiado.

El programa realiza lo siguiente

  • Eliminar columnas E y N (originales)
  • Insertar columna entre la C y la D
  • La columna G la cortamos y la pegamos en la nueva D
  • Eliminamos la columna G
  • Insertamos dos columnas delante de la A
  • Cortamos las columnas M y N y las pegamos en la A y B
  • Cortamos las columnas I y J y las pegamos en la M y N
  • Eliminamos las columnas I y J.

y

Cabeceras

  • MOD / AUTOLIQ / CLAVE / RECIBO / D/ CUOTA / ORD / NFIJO / NOMBRE / DNI / TIPO / SUBTIPO

Programa principal

Sub OrdenaColumnasTU
Dim oSheet
oSheet = ThisComponent.getSheets().getByIndex(0)
oSheet.getColumns().removeByIndex(4,1) ’ Elimina la columna 4 (E)
oSheet.getColumns().removeByIndex(12,1) ’ Elimina la columna 12 (M, antiga N)
oSheet.getColumns().insertByIndex(3,1) ’ Inserta una columna entre la C y la D
CopiaColumna (6,3) ’ Copiamos la columna G en la D
oSheet.getColumns().removeByIndex(6,1) ’ Eliminamos la columna G
oSheet.getColumns().insertByIndex(0,2) ’ Insertamos dos columnas delante de la A
CopiaColumna (12,0) ’ Copiamos la columna M en la A
CopiaColumna (13,1) ’ Copiamos la columna N en la B
CopiaColumna (8,12) ’ Copiamos la columna I en la M
CopiaColumna (9,13) ’ Copiamos la columna J en la N
oSheet.getColumns().removeByIndex(8,2) ’ Elimina la columna 8 y la 9 (I y J)
InsertaCabecera
OrdenarPorColumna (4) ’ Ordenamos por la columna de Recibo
AjustaAnchoColumna ’ Ajusta el ancho de las columnas
End Sub

Procedimiento

Sub CopiaColumna (col1 as integer, col2 as integer)		’ Copia columna origen a columna destino
Dim cont
cont = 0
oSheet = ThisComponent.getSheets().getByIndex(0)
Celda1 = oSheet.getCellByPosition(col1,cont) ’ Celda1 = (col1,1)
Celda2 = oSheet.getCellByPosition(col2,cont) ’ Celda2 = (col2,1)
Do While Celda1.value <> "0" ’ Copiamos la columna col1 en la col2
Celda2.value = Celda1.value
cont = cont + 1
Celda1 = oSheet.getCellByPosition(col1,cont)
Celda2 = oSheet.getCellByPosition(col2,cont)
loop
End Sub

Procedimiento

Sub InsertaCabecera
oSheet = ThisComponent.getSheets().getByIndex(0)
oSheet.getRows().insertByIndex(0,2)
Celda = oSheet.getCellByPosition(0,0)
Celda.string = "MOD"
Celda = oSheet.getCellByPosition(1,0)
Celda.string = "AUTOLIQ"
Celda = oSheet.getCellByPosition(2,0)
Celda.string = "CLAVE"
Celda = oSheet.getCellByPosition(3,0)
Celda.string = "RECIBO"
Celda = oSheet.getCellByPosition(4,0)
Celda.string = "D"
Celda = oSheet.getCellByPosition(5,0)
Celda.string = "CUOTA"
Celda = oSheet.getCellByPosition(6,0)
Celda.string = "ORD"
Celda = oSheet.getCellByPosition(7,0)
Celda.string = "NFIJO"
Celda = oSheet.getCellByPosition(8,0)
Celda.string = "NOMBRE"
Celda = oSheet.getCellByPosition(9,0)
Celda.string = "DNI"
Celda = oSheet.getCellByPosition(10,0)
Celda.string = "TIPO"
Celda = oSheet.getCellByPosition(11,0)
Celda.string = "SUBTIPO"
End Sub

Procedimiento

sub OrdenarPorColumna(columna as byte)
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$M$100"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(6) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ByRows"
args2(0).Value = true
args2(1).Name = "HasHeader"
args2(1).Value = true
args2(2).Name = "CaseSensitive"
args2(2).Value = false
args2(3).Name = "IncludeAttribs"
args2(3).Value = true
args2(4).Name = "UserDefIndex"
args2(4).Value = 0
args2(5).Name = "Col1"
args2(5).Value = columna
args2(6).Name = "Ascending1"
args2(6).Value = true

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args2())

end sub

Procedimiento

Sub AjustaAnchoColumna

rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$M$50"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "aExtraWidth"
args2(0).Value = 200

dispatcher.executeDispatch(document, ".uno:SetOptimalColumnWidth", "", 0, args2())

end sub
10/02/2011 08:29 #. Tema: openoffice No hay comentarios. Comentar.

07/02/2011

Macros OO I - Contenido Calc a Hipervinculo

coge una columna seleccionada y la transforma en vínculos

Código:

Option Explicit

rem Macro creada el 3/2/2011 por Raúl Huerta
rem La macro transforma cada celda de un rango seleccionado en un vinculo a la URL contenida en la propia celda

Sub Vinculos
Dim oCelda As Object
Dim oLink As Object
Dim oSel As Object
Dim fila As Long

oSel = ThisComponent.CurrentSelection
If oSel.ImplementationName = "ScCellRangeObj" Then
oCelda = oSel.getCellByPosition(0,0)
Do while oCelda.getString <> ""
oLink = ThisComponent.createInstance("com.sun.star.text.TextField.URL")
oLink.URL = oCelda.getString
oLink.Representation = oCelda.getString
oCelda.insertTextContent( oCelda.getText.createTextCursor, oLink, True )
fila = fila + 1
oCelda = oSel.getCellByPosition(0,fila)
Loop
End If

End Sub
07/02/2011 12:41 #. Tema: openoffice No hay comentarios. Comentar.

| Blog ciudadano realizado con Blogia 2.0 | Suscríbete: RSS | Administrar