--- title: Hojas --- ## Trabajar con hojas --- ### Referencia por **índice** ```py doc = app.active hoja = doc[0] app.debug(hoja.name) ``` ### Referencia por **nombre** ```py doc = app.active hoja = doc['datos'] app.debug(hoja.name) ``` ### **in** Verificar por nombre si una hoja existe. ```py doc = app.active existe = 'Hoja2' in doc app.debug(existe) ``` ### **len** Contar la cantidad de hojas en el documento. ```py doc = app.active contar = len(doc) app.debug(contar) ``` ### **iter** Recorrer todas las hojas. ```py doc = app.active for hoja in doc: app.debug(hoja) ```
## Propiedades --- ### **code_name** Nombre editable y accesible solo por código. ```py hoja = app.active.active app.msgbox(hoja.code_name) hoja.code_name = 'datos' app.msgbox(hoja.code_name) ```
### **color** Color de la pestaña. ```py hoja = app.active.active app.msgbox(hoja.color) hoja.color = 'red' app.msgbox(hoja.color) # RGB hoja.color = (125, 200, 10) app.msgbox(hoja.color) ```
### **doc** Devuelve al documento Calc donde esta la hoja. ```py hoja = app.active.active doc = hoja.doc app.debug(doc.title) ```
### **is_protected** Devuelve verdadero (True) si la hoja esta protegida ```py hoja = app.active.active esta_protegida = hoja.is_protected app.debug(esta_protegida) ```
### **name** Nombre visible y editable por el usuario. ```py hoja = app.active.active app.debug(hoja.name) hoja.name = 'Nuevo Nombre' app.debug(hoja.name) ```
### **password** Establecer una contraseña. !!! tip "Consejo" Si la hoja ya esta protegida, aún sin contraseña, este método no tendrá ningún efecto. ```py hoja = app.active.active hoja.password = 'siscaloburropanzon' app.debug(hoja.is_protected) ```
### **used_area** Referencia al área de usuario actual. ```py hoja = app.active.active rango = hoja.used_area app.debug(rango) ```
### **visible** Muestra u oculta la hoja ```py hoja = app.active.active app.msgbox(hoja.visible) hoja.visible = not hoja.visible app.msgbox(hoja.visible) hoja.visible = not hoja.visible ``` !!! tip "Cuidado" Solo funcionará con dos o más hojas, por que debe haber al menos una visible. Siempre puedes trabajar con todo el documento oculto.
## Métodos --- ### **activate** Pasar el foco a la hoja. !!! tip inline end "Recuerde" No es necesario activar una hoja para manipularse. ```py doc = app.active hoja = doc[-1] hoja.activate() ```
### **copy** !!! tip "Consejo" Siempre valide que no exista el nuevo nombre. ```py doc = app.active hoja = doc[0] nuevo_nombre = f'{hoja.name}_2' if not nuevo_nombre in doc: hoja.copy(nuevo_nombre) ``` Si no se establece el nuevo nombre, se generá de forma automática: `nombre + índice`. ```py hoja.copy() ``` ### **copy_to** Copiar la hoja a otro documento. Se usa el mismo nombre. ```py doc = app.active hoja = doc.active documento_nuevo = app.docs.new() hoja.copy_to(documento_nuevo) ``` Usar un nuevo nombre. ```python hoja.copy_to(documento_nuevo, 'Nuevo nombre') ```
### **move** Mover a la última posición. ```py doc = app.active hoja = doc[0] hoja.move() ``` Mover a una posición especifica. ```py doc = app.active hoja = doc[0] hoja.move(3) ```
### **remove** Remover hoja. ```py sheet = app.active.active sheet.remove() ``` !!! warning "Cuidado" Siempre debe existir al menos una hoja.
### **unprotect** Quitar contraseña. ```py hoja = app.active.active hoja.password = 'siscaloburropanzon' app.msgbox(hoja.is_protected) hoja.unprotect('siscaloburropanzon') app.msgbox(hoja.is_protected) ```
## Eventos --- ### **names** Obtener una tupla con los eventos soportados por la hoja. ```py hoja = app.active.active for nombre in hoja.events.names: app.debug(nombre) ``` ```sh 23/04/2023 16:59:26 - DEBUG - OnFocus 23/04/2023 16:59:26 - DEBUG - OnUnfocus 23/04/2023 16:59:26 - DEBUG - OnSelect 23/04/2023 16:59:26 - DEBUG - OnDoubleClick 23/04/2023 16:59:26 - DEBUG - OnRightClick 23/04/2023 16:59:26 - DEBUG - OnChange 23/04/2023 16:59:26 - DEBUG - OnCalculate ```
### Asignar una macro a un evento. ```py def on_select(source): app.debug(source.AbsoluteName) return def main(): doc = app.active hoja = doc.active if 'OnSelect' in hoja.events: macro = {'library': 'test', 'name': 'on_select'} hoja.events['OnSelect'] = macro return ```
### Eliminar la asignación del evento. ```py hoja.events['OnSelect'] = {} ``` O ```py hoja.events.remove('OnFocus') ```