+++ 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') ```