Trabajando con hojas

From Apache OpenOffice Wiki
< ES‎ | Manuales‎ | GuiaAOO‎ | TemasAvanzados‎ | Macros‎ | Python‎ | PythonCalc
Revision as of 05:03, 8 May 2013 by Mauriciobaeza (Talk | contribs)

Jump to: navigation, search


Acceso a las hojas de un archivo Calc

Para acceder a todas las hojas de un archivo usamos el método getSheets.

    doc = desktop.getCurrentComponent()
    hojas = doc.getSheets()


Podemos devolver todos los nombres de las mismas.

    doc = desktop.getCurrentComponent()
    hojas = doc.getSheets()
    nombres = hojas.getElementNames()
    msgbox('\n'.join(nombres))


O acceder por nombre a la que nos interesa (getByName), tienes que validar (hasByName) primero que existe esta hoja.

    doc = desktop.getCurrentComponent()
    hojas = doc.getSheets()
    nombre = 'Hoja1'
    if hojas.hasByName(nombre):
        hoja = hojas.getByName(nombre)
    else:
        msgbox('No existe la hoja: %s' % nombre)


Podemos acceder a una hoja por su índice, recuerda que los índices en AOO empiezan en cero, en las hojas, la numeración empieza de izquierda a derecha.

    doc = desktop.getCurrentComponent()
    hojas = doc.getSheets()
    indice = 1
    hoja = hojas.getByIndex(indice)
    msgbox (hoja.getName())


Del mismo modo que por el nombre, si tratas de acceder a una hoja por un índice que no exista, te dará un error, lo podemos comprobar asegurándonos que el numero de índice a consultar siempre es menor al total de las hojas.

    doc = desktop.getCurrentComponent()
    hojas = doc.getSheets()
    indice = 1
    if indice < hojas.getCount():
        hoja = hojas.getByIndex(indice)
        msgbox (hoja.getName())
    else:
        msgbox(u'No existe este índice: %s' % indice)


Podemos acceder a cada hoja por su índice, pero toma en cuenta que si mueves una hoja de posición en relación con las demás, su índice cambiara, no así su nombre, pero el nombre es susceptible de ser cambiado por el usuario, así que siempre comprueba que exista una hoja antes de intentar acceder a ella.

    doc = desktop.getCurrentComponent()
    hojas = doc.getSheets()
    for i in range(hojas.getCount()):
        msgbox(hojas.getByIndex(i).getName())


También es posible devolver la hoja activa.

    doc = desktop.getCurrentComponent()
    hoja = doc.getCurrentController().getActiveSheet()
    msgbox(hoja.getName())


Creamos una función genérica para devolver una hoja.

def devuelve_hoja(doc, nombre):
    if doc.getSheets().hasByName(nombre):
        return doc.getSheets().getByName(nombre)


Para usarse de forma sencilla.

    doc = desktop.getCurrentComponent()
    nombre = 'Hoja2'
    hoja = devuelve_hoja(doc, nombre)
    if hoja:
        msgbox(hoja.getName())
    else:
        msgbox('No se encontró la hoja: %s' % nombre)re)


Insertando hojas

Para insertar nuevas hojas, usamos el método: insertNewByName(Nombre, Posición), en donde necesitamos el nombre de la nueva hoja a insertar y la posición donde la queremos, la siguiente macro agrega una hoja nueva al inicio de las demás.

    hojas = doc.getSheets()
    hojas.insertNewByName('Nuevos datos', 0)


Ejecuta la macro anterior dos veces y notaras que te dará un error, pues no puedes tener dos hojas con el mismo nombre, entonces, tenemos que verificar si la hoja existe o no.

    nombre = 'Nueva hoja'
    hojas = doc.getSheets()
    if not hojas.hasByName(nombre):
        hojas.insertNewByName(nombre, 0)
    nueva_hoja = doc.getSheets().getByName(nombre)
    doc.getCurrentController().setActiveSheet(nueva_hoja)


Observa que solo agregamos la hoja si esta no existe, entonces solo hacemos una referencia a ella. La ultima linea para activar la hoja no es necesaria para que la manipules, solo en caso de que quieras que el usuario haga o manipule algo en ella, si no, puedes omitirla. Template:Documentation/Note

Borrando hojas

Moviendo hojas

Copiando hojas

Renombrando hojas

Ocultando y mostrando hojas

Protección y desprotección de hojas

Personal tools