# Calc

#### Trabajar con Calc

### active

    doc = app.active
    app.debug(doc.type)

#### Propiedades

### headers

Mostrar u ocultar encabezados de filas y columnas.

    doc = app.active
    app.msgbox(doc.headers)
    doc.headers = not doc.headers
    app.msgbox(doc.headers)
    doc.headers = not doc.headers

### tabs

Mostrar u ocultar las pestañas de las hojas.

    doc = app.active
    app.msgbox(doc.tabs)
    doc.tabs = not doc.tabs
    app.msgbox(doc.tabs)
    doc.tabs = not doc.tabs

### selection

Devolver la selección activa.

    doc = app.active
    seleccion = doc.selection
    app.debug(seleccion)

Cuidado, la selección actual pueden ser muchas cosas diferentes.

### names

Devolver una tupla con los nombres de todas las hojas.

    doc = app.active
    nombres = doc.names
    app.debug(nombres)

### active

Devuelve la hoja activa.

    doc = app.active
    hoja = doc.active
    app.debug(hoja)

#### Métodos

### activate

Activar hoja, argumento como objeto.

    doc = app.active
    hoja = doc[-1]
    doc.activate(hoja)

Activar hoja por nombre.

    doc = app.active
    doc.activate('Hoja3')

### select

Seleccionar una celda o rango.

    doc = app.active
    cell = doc[0]['A1']
    doc.select(cell)

NO es necesario seleccionar celdas o rangos para manipularlos.

### start_range_selection

Permitir al usuario seleccionar un rango. Es necesario pasarle una clase con el nombre que prefiera (`Eventos` es recomendable) con dos métodos para procesar la captura como en el siguiente ejemplo:

    class Eventos():

        def __init__(self, doc):
            self.doc = doc

        def range_selection_done(self, range_selection):
            if range_selection:
                app.debug(range_selection)
            self.doc.remove_range_selection_listener()
            return

        def range_selection_aborted(self):
            self.doc.remove_range_selection_listener()
            return

    def main():
        doc = app.active
        doc.start_range_selection(Eventos)
        return

### insert

Inserta una nueva hoja.

    doc = app.active
    hoja = doc.insert('OtraHoja')

Insertar varias hojas. Devolverá la última insertada.

    nombres = ('Enero', 'Febrero', 'Marzo')
    hoja = doc.insert(nombres)
    app.debug(hoja)

Creando una nueva instancia y asignandola.

        doc = app.active
        doc['NuevaHoja'] = doc.new_sheet()

Si la hoja existe, obtendrá un error, verifique siempre que no exista primero.

### move

Mover hojas.

Pasar la hoja como objeto, de forma predetermianda se mueve a la última posición.

    doc = app.active
    hoja = doc[0]
    doc.move(hoja)

Pasar la hoja por nombre.

    doc = app.active
    doc.move('Hoja1')

Especificar la posición destino.

    doc = app.active
    hoja = doc[0]
    doc.move(hoja, 2)

### remove

Eliminar hoja.

    doc = app.active
    sheet = doc[0]

    doc.remove(sheet)

Eliminar por nombre.

    doc.remove('Hoja2')

### copy

Copiar hoja dentro del mismo documento.

    doc = app.active
    hoja = doc[0]

    doc.copy_sheet(hoja, 'Otra hoja')

Por nombre.

    doc.copy_sheet('Hoja1', 'Hoja2')

Si no se establece el nuevo nombre, se generá de forma automática: `nombre + índice`.

    doc.copy_sheet(hoja)

### copy_from

Copiar hojas de otro documento. Copiar con el mismo nombre.

    doc = app.active
    documento_origen = app.docs['Contactos.ods']
    nombre_origen = 'Nombres'

    doc.copy_from(documento_origen, nombre_origen)

Copiar con un nuevo nombre.

    doc.copy_from(documento_origen, nombre_origen, 'NuevoNombre')

Si solo se establece el documento origen, se copian todas las hojas.

    doc.copy_from(documento_origen)

### sort

Ordenar hojas en orden alfabetico.

    doc = app.active
    doc.sort()

Ordenar de forma inversa.

    doc = app.active
    doc.sort(True)

### Eventos del documento.

Obtener una tupla con los eventos soportados por el documento.

    doc = app.active
    nombres = doc.events.names
    app.debug(nombres)

#### Asignar una macro a un evento.

    def doc_on_focus(event):
        app.debug('Documento activado...')
        return

    def main():
        doc = app.active
        events = doc.events
        if 'OnFocus' in events:
            macro = {'library': 'test', 'name': 'doc_on_focus'}
            events['OnFocus'] = macro
        return

#### Eliminar la asignación del evento.

    doc = app.active
    doc.events['OnFocus'] = {}

O

    doc = app.active
    doc.events.remove('OnFocus')