Macro para Insertar gráficos. Con Basic "dispatcher.executeDispatch(document, ".uno:InsertObjectChart", "", 0, Array())" o Python

Hola!
Uso writer Versión: 6.0.7.3.

Mi intención es insertar gráficos pastel/torta a partir de la tabla que contiene los datos mediante un macro.
ejemplo tabla.odt
descripción de la imagen

Pude insertar el gráfico sobre la tabla con una serie de indicaciones por teclado. La secuencia grabada la pego abajo pero cada vez que ejecuté esa macro tuve que seleccionar el tipo de gráfico. No encuentro cómo definir que el tipo de gráfico sea pie, supongo que es un parámetro en la linea:

dispatcher.executeDispatch(document, “.uno:InsertObjectChart”, “”, 0, Array())

¿tienen documentación sobre esta linea? ¿o cómo indicar que sea pie?


sub grafico_desde_fin_pregunta
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:InsertPara", "", 0, Array())

rem ----------------------------------------------------------------------
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Count"
args2(0).Value = 1
args2(1).Name = "Select"
args2(1).Value = false

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:EndOfDocumentSel", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:InsertObjectChart", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:TerminateInplaceActivation", "", 0, Array())


end sub

Además intenté adaptar las siguiente lineas de código de Mauricio para zaz/python/easymacro pero no lo logre:

name = 'MyChart'
with writer.create_chart('Pie') as c:
    c.name = name
    c.table = table
    c.data = 'A1:B5'
    c.width = 11000
    c.height = 7000
    c.legend.CharColor = app.get_color('black') 

En el caso de easymacro o python ¿cómo defino que recupere los datos del rango que selecciono?

Relacionado con: Macro para pasar tablas de calc a writer con encabezado y descripción. Y generar gráfico pastel

Estoy estudiando python por lo que quisiera conocer los módulos que hay.

Saludos!!

De hecho, te di la solución en el tema relacionado y no le diste más seguimiento.

Hola, me faltó tiempo para seguir con python pero lo retomaré. Tenía que entregar un avance sin demoras y por eso pregunté si existe esta funcionailidad en writer.

Son las propiedades:

c.table = table    
c.data = 'A1:B5'

pero table es un objeto personalizado de easymacro

Creo recordar, además, que hay un problema con LibreOffice 6.0 en las macros Python, pero no estoy seguro. Si preparas de nuevo un ejemplo, lo reviso.

No encuentro documentación de las funciones para entender cómo definir las celdas de la tabla que previamente selecciono como valor para el gráfico.

Por otro lado, en el código grabado con base tampoco encuentro documentación sobre esta linea para definir que es un grafico de tipo “pie”:

dispatcher.executeDispatch(document, “.uno:InsertObjectChart”, “”, 0, Array())

de easymacro, no la encontrarás aún, por que lo he desarrollado desde tu primer mensaje con este tema, con el ejemplo que muestras es simple, hay una sola tabla, pero supongo que tu documento debe tener muchas tablas.

El problema, solucionable pero complicado en Writer, es la posición de las cosas, es decir, en este ejemplo es fácil, se agrega al final del texto, pero reitero, mencionas que tienes muchas tablas. ¿Que criterio sigues para posicionar donde se insertará el gráfico?, si, se que es obvio para uno viendo el documento, esto debe de establecerse por código, no es tán evidente.

Creo, reitero el creo, por eso es más fácil generar todo desde Calc, que creo, reitero el creo, ya estaba solucionado en el anterior tema.

No me gusta trabajar en vano, si tu documento tiene más elementos, deberías mostrarlo, por que el código que se ponga, no podrá ser solamente reproducido en más elementos, solo funcionará para este caso.