+++
title = "Calc"
weight = 6
+++

#### Trabajar con Calc

### active


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

#### Propiedades

### headers

Mostrar u ocultar encabezados de filas y columnas.

```python
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.

```python
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.

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

{{% notice warning %}}
**Cuidado**, la selección actual pueden ser muchas cosas diferentes.
{{% /notice %}}


### names

Devolver una tupla con los nombres de todas las hojas.

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

### active

Devuelve la hoja activa.

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


#### Métodos

### activate

Activar hoja, argumento como objeto.

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

Activar hoja por nombre.

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


### select

Seleccionar una celda o rango.

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

{{% notice tip %}}
**NO** es necesario seleccionar celdas o rangos para manipularlos.
{{% /notice %}}


### 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:

```python
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.

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

Insertar varias hojas. Devolverá la última insertada.

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

Creando una nueva instancia y asignandola.

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

{{% notice warning %}}
Si la hoja existe, obtendrá un error, verifique siempre que no exista primero.
{{% /notice %}}


### move

Mover hojas.

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

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

Pasar la hoja por nombre.

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

Especificar la posición destino.

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


### remove

Eliminar hoja.

```python
doc = app.active
sheet = doc[0]

doc.remove(sheet)
```

Eliminar por nombre.

```python
doc.remove('Hoja2')
```


### copy

Copiar hoja dentro del mismo documento.

```python
doc = app.active
hoja = doc[0]

doc.copy_sheet(hoja, 'Otra hoja')
```

Por nombre.

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

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

```python
doc.copy_sheet(hoja)
```


### copy_from

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

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

doc.copy_from(documento_origen, nombre_origen)
```

Copiar con un nuevo nombre.

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

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

```python
doc.copy_from(documento_origen)
```


### sort

Ordenar hojas en orden alfabetico.

```python
doc = app.active
doc.sort()
```

Ordenar de forma inversa.

```python
doc = app.active
doc.sort(True)
```


### Eventos del documento.

Obtener una tupla con los eventos soportados por el documento.

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

#### Asignar una macro a un evento.

```python
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.

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

O

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

