Cómo ejecutar scripts de Python en las macros de LibreOffice Calc
Aprende cuándo usar macros de Python directamente en Calc y cómo llamar a funciones de Python desde LibreOffice Basic con ejemplos prácticos de UNO y ScriptForge.
Sí. LibreOffice Calc puede ejecutar código Python como una macro dentro del proceso de LibreOffice, y una macro de LibreOffice Basic también puede llamar a una función de Python a través del entorno de scripting de LibreOffice. Si su objetivo es leer o modificar celdas en la hoja de cálculo abierta, una macro de Python dentro del proceso suele ser el punto de partida más sencillo. Utilice una llamada de Basic a Python cuando una macro de Basic existente deba delegar una tarea a una función de Python reutilizable.
Estos métodos difieren de ejecutar un script de Python del sistema con un comando de shell. Un proceso externo de Python no recibe automáticamente el objeto de documento de Calc. Para acceder a un libro de trabajo, ejecute una macro de Python a través de LibreOffice o conecte un proceso externo a una instancia de LibreOffice mediante UNO.
LibreOffice admite varios lenguajes de scripting a través de su marco de trabajo. En una macro de Python, LibreOffice proporciona un objeto de contexto UNO que permite que el script acceda al documento actual y sus hojas. Una macro de Python es una función dentro de un .pymódulo; la g_exportedScriptstupla del módulo identifica las funciones que LibreOffice debe mostrar como macros ejecutables.
Una macro de Python puede ejecutarse de forma independiente desde el menú de macros de Calc. No es necesario que Basic la llame. Si ya tiene una macro de Basic y desea que llame a Python, el proveedor de scripts de LibreOffice o el nuevo Session.ExecutePythonScriptservicio ScriptForge pueden servir de puente entre ambos lenguajes.
Por ejemplo, una pequeña herramienta de limpieza de hojas de cálculo se puede escribir completamente como una macro de Python. Si un botón de Basic ya genera un informe, conserve la macro del botón y haga que llame a una función de Python que calcule el total del informe.
LibreOffice almacena los scripts personales de Python en el perfil del usuario, los scripts de la aplicación en el directorio de instalación y los scripts de los documentos junto con el documento. Para una primera prueba, un script personal resulta práctico, ya que está disponible desde cualquier documento de LibreOffice abierto para el mismo usuario. Sin embargo, no se incluye en un archivo ODS, por lo que otra persona no lo recibirá automáticamente con la hoja de cálculo.
Encuentra la carpeta de scripts de Python de tu sistema en la Ayuda de LibreOffice, en la sección «Organización y ubicación de los scripts de Python». Las ubicaciones más comunes incluyen %APPDATA%\LibreOffice\4\user\Scripts\pythonWindows y ~/.config/libreoffice/4/user/Scripts/pythonLinux. La ubicación real puede variar; utiliza la documentada para tu instalación en lugar de crear un segundo directorio de perfil al azar.
Crea un archivo con ese nombre calc_tools.pyen la carpeta de scripts de Python personales y luego agrega este sencillo ejemplo:
def double_a1(args=None):
doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.getCurrentController().getActiveSheet()
source = sheet.getCellRangeByName("A1")
target = sheet.getCellRangeByName("B1")
target.setValue(source.getValue() * 2)
g_exportedScripts = (double_a1,)
Esta función lee el valor numérico de la celda A1 de la hoja activa y escribe el doble de ese valor en la celda B1. XSCRIPTCONTEXTSe proporciona a una macro de Python de LibreOffice en tiempo de ejecución; no es una variable global de Python habitual cuando el mismo archivo se ejecuta fuera de LibreOffice. La función pública g_exportedScriptsaparece en el selector de macros.
Guarda el archivo, luego abre o regresa a Calc y elige Herramientas > Macros > Ejecutar macros . Dependiendo de la versión de LibreOffice o la traducción de la plataforma, la etiqueta del menú puede ser singular. Selecciona Mis macros > calc_tools > double_a1 y ejecútala. Primero introduce un número en A1, luego verifica que B1 contenga el valor duplicado. Si el módulo no aparece, confirma que la extensión del archivo sea .py .py, que el archivo esté en la carpeta Python del perfil correcto y que la compatibilidad con scripts de Python esté instalada. Reiniciar LibreOffice después de agregar un nuevo módulo puede ayudar a actualizar la lista de scripts.
Para realizar una llamada de Basic a Python, coloque un módulo de Python en la carpeta de scripts personales y llame a su función a través del Sessionservicio de ScriptForge. Este ejemplo suma dos valores en Python y escribe el resultado en la celda B1 de la hoja de cálculo actual.
En calc_tools.py, defina la función:
def add_values(first, second):
return float(first) + float(second)
g_exportedScripts = (add_values,)
Luego, crea una macro básica en Calc y usa:
Sub RunPythonHelper()
Dim session As Object
Dim result As Variant
Dim sheet As Object
session = CreateScriptService("Session")
result = session.ExecutePythonScript( _
session.SCRIPTISPERSONAL, _
"calc_tools.py$add_values", _
12, 30)
sheet = ThisComponent.CurrentController.getActiveSheet()
sheet.getCellRangeByName("B1").setValue(result)
End Sub
Ejecutar RunPythonHelperdesde el selector de macros Básico. Si la llamada se realiza correctamente, B1 debería mostrar 42. La referencia del script sigue el formato module.py$function_name; para un módulo en una subcarpeta u otra ubicación de almacenamiento, utilice la sintaxis y la constante de ubicación documentadas para esa versión de ScriptForge. Mantenga los argumentos y los valores de retorno en tipos de datos que ambos lenguajes puedan representar correctamente, como números, cadenas y secuencias simples.
CreateScriptServiceLas funciones auxiliares de sesión de ScriptForge documentadas están disponibles en las versiones modernas de LibreOffice, pero los nombres de los menús y los componentes incluidos pueden variar en versiones anteriores o en paquetes de distribución. Si este servicio no está disponible, utilice el método documentado del proveedor de scripts UNO de LibreOffice, que obtiene un XScriptscript a partir de su URI y lo ejecuta. Evite copiar un fragmento de código para una ubicación de macro diferente sin modificar su configuración de ubicación.
| Almacenamiento | Mejor ajuste | Compensación |
|---|---|---|
| Mis macros / perfil de usuario | Tus propias herramientas reutilizables para todos los documentos | No se incluye automáticamente al enviar la hoja de cálculo. |
| Macros de aplicación | Scripts gestionados para múltiples usuarios en una misma instalación. | Normalmente requiere acceso de administrador para su instalación o mantenimiento. |
| Macros de documentos | Código destinado a ser asociado con un documento | Es posible que los destinatarios deban habilitar las macros; pruebe la portabilidad y el comportamiento de seguridad en la versión de LibreOffice de destino. |
Para un flujo de trabajo en equipo, decida cómo los destinatarios recibirán y confiarán en el código antes de crear un libro de trabajo basado en una macro personal. Si la lógica de Python debe acompañar a la hoja de cálculo, pruebe el almacenamiento de macros y las indicaciones de seguridad del documento en las mismas versiones de LibreOffice que utilizan sus destinatarios. Para una implementación controlada, un administrador puede empaquetar scripts para los usuarios o distribuir una extensión bajo los controles de software habituales de la organización.
Scripts/pythondirectorio.g_exportedScriptspara una función que desee ejecutar desde el selector de macros. Asegúrese de que la sintaxis de la tupla incluya la coma final para una tupla de un solo elemento.XSCRIPTCONTEXT Existe para una macro iniciada por LibreOffice, no cuando el mismo archivo se abre con el pythoncomando del sistema. Utilice el ejecutor de macros o configure una conexión UNO documentada.XSCRIPTCONTEXTno se pasa a los módulos importados. Pase el objeto de documento u hoja necesario a las funciones auxiliares en lugar de esperar que los módulos importados lean esa variable global.Prueba con una copia de la hoja de cálculo y una entrada conocida. Confirma que la macro de Python aparece en el ejecutor, ejecútala una vez y compara la celda de salida con un resultado calculado manualmente. Para una llamada de Basic a Python, prueba con una entrada simple y confirma que el valor devuelto se escribe en la hoja deseada. Evita comenzar con scripts que eliminen hojas, sobrescriban rangos grandes o ejecuten comandos del sistema operativo.
Cuando la prueba funcione, decida cómo se instalará el script en otros equipos y documente las bibliotecas de Python necesarias o las suposiciones sobre la versión de LibreOffice. El entorno de Python incluido en LibreOffice es el que se utiliza para las macros en proceso; es posible que los paquetes instalados para un intérprete de Python de sistema independiente no estén disponibles. Si necesita paquetes de otro intérprete, utilice el método de proceso externo/UNO y configure esa conexión de forma específica.
Aprende cuándo usar macros de Python directamente en Calc y cómo llamar a funciones de Python desde LibreOffice Basic con ejemplos prácticos de UNO y ScriptForge.
Solucione el error "Host WOPI no autorizado" de Collabora Online CODE haciendo coincidir el nombre de host de WOPI, configurando los grupos de hosts de Docker, comprobando la lista de direcciones IP permitidas de Nextcloud y verificando la conectividad.
Fix ONLYOFFICE “Token is not valid” errors in Nextcloud by checking the JWT secret, authorization header, Docker settings, proxy behavior, and connector health.
Solucione el error "No se pudo guardar el documento" de ONLYOFFICE en Nextcloud revisando las devoluciones de llamada, las URL internas, JWT, TLS, el enrutamiento del proxy, los registros y el almacenamiento.
Solucione los errores de conexión de socket de Collabora Online revisando el cambio de WebSocket 26.04, las rutas de proxy, los encabezados de actualización, los tiempos de espera, TLS y los registros.
Habilite la revisión ortográfica multilingüe en Collabora Online agregando diccionarios de servidor, permitiendo códigos de idioma, asignando idiomas al texto y probando documentos con varios idiomas.
Create a reliable LibreOffice Writer mail merge with per-record images using Calc data, a named image placeholder, and a Basic macro, with troubleshooting and verification steps.
Diagnostica y soluciona los fallos de conexión de documentos de Collabora Online comprobando WOPI, el proxy inverso, TLS, DNS, WebSockets y la accesibilidad entre servidores.
Convierta un PDF a un DOCX editable en los editores de escritorio de ONLYOFFICE sin conexión. Siga los pasos de Guardar como, compruebe si el PDF se ha escaneado y revise el formato.
Conecte Seafile a Collabora Online mediante Docker o un servidor independiente. Compare las ventajas y desventajas de la implementación, configure los ajustes de HTTPS y WOPI, y verifique la edición.