Haz tu Pregunta
0

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

preguntado 2020-02-05 01:48:02 +0100

Imagen Gravatar de pemacolin

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 <module> activa = doc.getCurrentController().getActiveSheet() __main__.RuntimeException: Binary URP bridge disposed during call

edit re-etiquetar marcar como ofensivo cerrar fusionar delete

Comments

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

Imagen Gravatar de mauricio mauricio ( 2020-02-05 21:44:46 +0100 )edit

Tiene GNOME Versión 3.22.2

Imagen Gravatar de pemacolin pemacolin ( 2020-02-05 22:00:19 +0100 )edit

¿Es mejor implementar python como macro en LibreOffice?

Imagen Gravatar de pemacolin pemacolin ( 2020-02-05 22:05:07 +0100 )edit

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

Imagen Gravatar de mauricio mauricio ( 2020-02-05 23:07:33 +0100 )edit

2 Respuestas

Ordenar por » viejos nuevas más votado
0

respondido 2020-02-05 05:55:14 +0100

Imagen Gravatar de mauricio

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/M...

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

Por favor, dale un correcto seguimiento a tu pregunta.

edit marcar como ofensivo delete enlace mas
0

respondido 2020-02-05 18:40:35 +0100

Imagen Gravatar de pemacolin

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 <module> 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.

edit marcar como ofensivo delete enlace mas

Comments

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

Imagen Gravatar de mauricio mauricio ( 2020-02-05 21:30:23 +0100 )edit
Ingresa/Regístrate para Contestar

Herramientas de Preguntas

1 seguidor

Estadisticas

Preguntado: 2020-02-05 01:48:02 +0100

Visto: 26 veces

Ultima actualización: Feb 05