Python - Copiar apartados de un documento a otro conservando los estilos
Publicado: Vie Jun 02, 2023 10:02 am
Buenas compañeros del foro.
He trabajado desde hace tiempo con macros en basic para Libre Office. Y como Mauricio siempre recomendaba python, desde hace un tiempo estoy haciendo cosas con ese lenguaje para las macros.
Estoy utilizando PySide6, para utilizar una aplicación de escritorio desde la que poder hacer llamadas a macros de Libre Office, la cosa funciona.
Pero estoy atascado desde hace días en una macro de python para Libre Office para copiar apartados de un documento conservando sus estilos:
Mi idea es copiar apartados de un documento a otro icluyendo sus estilos, entendiendo como apartado del documento el título de dicho apartado y su texto asociado, ilustraciones, etc.). Sé como controlar los documentos, pero no sé como seleccionar los apartados mencionados y copiar/pegar con sus correspondientes estilos.
He probado con cursores y puedo recorrer todos los títulos del documento, pongamos como ejemplo títulos de tipo "Título 2", buscando un texto de título2 en particular, por lo que deberé copiar desde ese título hasta justo antes de que comience el siguiente título. Pero con dichos cursores solo consigo copiar el texto.
Acudí a este tema del foro: https://forum.openoffice.org/en/forum/v ... hp?t=79540
Con lo que puedo copiar todo el contenido del documento (incluyendo estilos), y pegarlo con [dispatcher.executeDispatch(frame, ".uno:Paste", "", 0, ())]: ver ejemplo inferior
document = XSCRIPTCONTEXT.getDocument()
ctx = uno.getComponentContext()
sm = ctx.ServiceManager
dispatcher = sm.createInstanceWithContext("com.sun.star.frame.DispatchHelper", ctx)
frame = document.CurrentController.Frame
dispatcher.executeDispatch(frame, ".uno:SelectAll", "", 0, ())
dispatcher.executeDispatch(frame, ".uno:Copy", "", 0, ())
dispatcher.executeDispatch(frame, ".uno:GoToEndOfDoc", "", 0, ())
dispatcher.executeDispatch(frame, ".uno:Paste", "", 0, ())
Funciona por lo que parece que la copia con estilos es posible, ¿sabría alguien como podría seleccionar un apartado en concreto y pegarlo?
Aprovecho para preguntar si saben si Mauricio sigue manteniendo ZAZ EasyMacros para Python, la idea es buena, o si alguien conoce otro framework útil.
Lástima que no hay mucha información de macros en python.
Un saludo y gracias de antemano.
He trabajado desde hace tiempo con macros en basic para Libre Office. Y como Mauricio siempre recomendaba python, desde hace un tiempo estoy haciendo cosas con ese lenguaje para las macros.
Estoy utilizando PySide6, para utilizar una aplicación de escritorio desde la que poder hacer llamadas a macros de Libre Office, la cosa funciona.
Pero estoy atascado desde hace días en una macro de python para Libre Office para copiar apartados de un documento conservando sus estilos:
Mi idea es copiar apartados de un documento a otro icluyendo sus estilos, entendiendo como apartado del documento el título de dicho apartado y su texto asociado, ilustraciones, etc.). Sé como controlar los documentos, pero no sé como seleccionar los apartados mencionados y copiar/pegar con sus correspondientes estilos.
He probado con cursores y puedo recorrer todos los títulos del documento, pongamos como ejemplo títulos de tipo "Título 2", buscando un texto de título2 en particular, por lo que deberé copiar desde ese título hasta justo antes de que comience el siguiente título. Pero con dichos cursores solo consigo copiar el texto.
Acudí a este tema del foro: https://forum.openoffice.org/en/forum/v ... hp?t=79540
Con lo que puedo copiar todo el contenido del documento (incluyendo estilos), y pegarlo con [dispatcher.executeDispatch(frame, ".uno:Paste", "", 0, ())]: ver ejemplo inferior
document = XSCRIPTCONTEXT.getDocument()
ctx = uno.getComponentContext()
sm = ctx.ServiceManager
dispatcher = sm.createInstanceWithContext("com.sun.star.frame.DispatchHelper", ctx)
frame = document.CurrentController.Frame
dispatcher.executeDispatch(frame, ".uno:SelectAll", "", 0, ())
dispatcher.executeDispatch(frame, ".uno:Copy", "", 0, ())
dispatcher.executeDispatch(frame, ".uno:GoToEndOfDoc", "", 0, ())
dispatcher.executeDispatch(frame, ".uno:Paste", "", 0, ())
Funciona por lo que parece que la copia con estilos es posible, ¿sabría alguien como podría seleccionar un apartado en concreto y pegarlo?
Aprovecho para preguntar si saben si Mauricio sigue manteniendo ZAZ EasyMacros para Python, la idea es buena, o si alguien conoce otro framework útil.
Lástima que no hay mucha información de macros en python.
Un saludo y gracias de antemano.