¿Cómo inserto datos en una hoja de Calc con Python3?

Intento inserta un valor de la siguiente forma:

doc = desktop.getCurrentComponent()

activa = doc.getCurrentController().getActiveSheet()

celda = activa.getCellRangeByName(‘A1’)

celda.setString(“LibreOffice”)

Sin embargo, me muestra el siguiente error:

Traceback (most recent call last):
File “LOffice.py”, line 37, in
activa = doc.getCurrentController().getActiveSheet()
main.RuntimeException: Binary URP bridge disposed during call

Veo que quieres usar LibreOffice como servicio. Tu Debian9 es un servidor o tienes interfaz gráfica?

Tiene GNOME Versión 3.22.2

¿Es mejor implementar python como macro en LibreOffice?

Eso depende de tus necesidades, yo lo uso de las dos formas, como macros o como servicio, dependiendo del trabajo a realizar.

El objeto desktop debes de instanciarlo primero, pero no es necesario para acceder al documento actual, además, ahora, es posible acceder a las celdas como a un diccionario:

def main():
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.CurrentController.ActiveSheet
    sheet['A1'].String = 'LibreOffice'
    return

Casi todo lo que escribí en su momento para OpenOffice, sigue siendo valido para LibreOffice, por aquí:
https://wiki.openoffice.org/wiki/ES/Manuales/GuiaAOO/TemasAvanzados/Macros/Python

Estamos documentado todo para LibreOffice, por aquí:
https://wiki.documentfoundation.org/Macros/Python_Guide

Por favor, dale un correcto seguimiento a tu pregunta.

Hola, gracias por tu respuesta, en efecto me he estado apoyando en la documentación de OpenOffice, de forma que note que funciona igual para Libre Office, sin embargo no puedo acceder a las celdas de la hoja activa, me muestra el siguiente error:


Traceback (most recent call last):
File “LOffice.py”, line 39, in
activa[‘A1’].String = ‘LibreOffice’
TypeError: ‘PyUNO_callable’ object is not subscriptable


Te comparto mi procedimiento:

1.- Inicio la conexión en LibreOffice con el siguiente comando:

/usr/local/bin/libreoffice6.2 --calc --accept=“socket,host=localhost,port=2002;urp;StarOffice.ServiceManager”

2.- Inicio la shell de Python3 y ejecuto los siguientes comandos:

import uno

localContext = uno.getComponentContext()

resolver = localContext.ServiceManager.createInstanceWithContext(“com.sun.star.bridge.UnoUrlResolver”,localContext)

ctx = resolver.resolve( “uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext”)

smgr = ctx.ServiceManager

desktop = smgr.createInstanceWithContext( “com.sun.star.frame.Desktop”,ctx)

doc = desktop.getCurrentComponent()

activa = doc.getCurrentController().getActiveSheet

activa[‘A1’].String = ‘LibreOffice’

(Cabe mencionar que tengo Debían 9, LibreOffice 6.2.8 y Python 3.5.3)

Saludos.

Por favor, no uses la respuesta para dar seguimiento a tu pregunta, edita siempre tu primer tema o agrega los comentarios necesarios.