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

Sí podría instalar extensiones. Las pruebas las hago en una maquinavirtual que tiene ubuntu.

Me parece interesante este problema, por que me parece, debe ser algo frecuente. He realizado algunas pruebas de concepto con Python y van bien, con el siguiente código:

OK: He agregado estos cambios a la rama master, esto significa que puede ser usado en producción. Encontré un pequeño detalle, que no se si me falta algo o es un bug de LibreOffice, pero con el cual podemos vivir por ahora con el. El gráfico no se muestra de forma automática, hay que darle doble clic como en el gif que muestro o guardar y volver a cargar, ya veremos como lo arreglamos, aquí el ćodigo completo con el que hice el gif.

import uno
import easymacro as app

def calc2writer():
    doc = app.get_document()
    sheet = doc['Sheet1']
    data = sheet['A1'].current_region.data
    first = data[0][0]
    last = data[-1][0]
    table_data = data[1:-1]

    writer = app.new_doc('writer')
    writer.write(first)
    writer.write('\n\n')
    table = writer.insert_table(table_data)
    chart_data = 'A1:B5'
    writer.write('\n')
    writer.write(last)
    writer.write('\n\n')

    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')

    return

descripción de la imagen

Obtenemos

Si puedes generar lo mismo que aquí, estas a un paso de resolver todo.

Saludos

Hola Mauricio! Necesitaría comprender cómo ejecutar ese código. Entiendo que tendría que seleccionar cada tabla en calc y ejecutar luego código en writer como macro ¿es así?
Miré tus video 1 y 2: https://vimeo.com/214107600
Y miré https://macros.elmau.net/es/py/macros/
Gracias a ello pude instalar Python para libreoffice.
Todavía no entiendo qué significa “app.get_document” y cómo ejecutar este macro.
Observo que existe esta guía: Python - Apache OpenOffice Wiki
Seguiré leyendo. Muchas gracias por tu tiempo!!

No necesariamente, si tu archivo origen esta bien estructurado, se pueden generar una o mil, para eso es la programación, para que haga por nosotros esas cosas repetitivas, que casi siempre son aburridas.

Reitero, es un tema muy interesante por que creo, se debe presentar con frecuencia, además, es muy divertido hacerlo.

Para saber como empezar con esta herramientas, debes de ver por aquí: https://gitlab.com/mauriciobaeza/zaz/wikis/easymacro.py

Espero pronto tenerlo en video.

Gracias Mauricio, pude ejecutar el Test que se propone en ese enlace pero cuando intento con la macro que contiene el código que escribiste arriba me indica “com.sun.star.uno.RuntimeException: Error during invoking function main in module file:///home/pea/.config/libreoffice/4/user/Scripts/python/RPST_cuadros_graficos.py (<class ‘NameError’>: name ‘app’ is not defined
File “/usr/lib/libreoffice/program/pythonscript.py”, line 916, in invoke
ret = self.func( *args )
File “/home/pea/.config/libreoffice/4/user/Scripts/python/RPST_cuadros_graficos.py”, line 2, in main
doc = app.get_document()
)”
Seguiré intentando ejecutar el código.

El código que te mostré, es una prueba de concepto, pues recién le agregue el soporte para generar las tablas y el gráfico desde Writer. El error que mencionas, es por que no estas importando esymacro

import easymacro as app

Si, no lo puse arriba, por que reitero, era una prueba de concepto, pero esta trabajando bien y podemos pasarlo a producción.

Mira este video por favor: 02 Prueba de ejecucion on Vimeo

Gracias! Me generó el writer con una tabla y su descripción. Para eso, además cambié “Sheet1” por “Hoja1” y ubiqué dentro de la misma carpeta a easymacro.py y uno.py porque no supe invocarlas desde la carpeta pythonpath. El gráfico no se incorpora, writer me muestra el error “‘LOWriter’ object has no attribute ‘insert_chart’” y tengo q hacer que se ejecute para todas las tablas, supongo con un for o while. Quisiera no molestarte por eso estuve varias horas con esto, intenté entender el código a partir de https://gitlab.com/mauriciobaeza/easy-macro/wikis/index-es y busqué el error en Macros y API UNO (Ver foro) • Apache OpenOffice: Foro oficial de la comunidad. Me estoy acercando a Python así que me resulta bueno saber este lenguaje. Sigo escribiendo por acá o recomendarías otro foro?

Reitero compañero, “era una prueba de concepto”, mientras no lo suba a producción no podrás usarlo. Espera a que te confirme en este tema que ya esta en producción para que hagas tus pruebas.

Listo, ahora están en producción estos cambios.

Hola! Pase libreoffice a idioma ingles para evitar inconsistencias por eso y actualice easymacro.py
Obtengo el documento que subi en Documento Writer resultante hasta el momentoC:\fakepath\prueba2019_11_1.odt junto con el error.
Voy a seguir intentando y te escribo.

No tiene nada que ver el idioma. ¿Estas usando exactamente el archivo fuente que enlazaste arriba?. La ventaja es que no hay que estar adivinando, el error es claro, algún objeto no lo esta identificando correctamente y devuelve None, no descartemos que sea un error de easymacro.py, pues le he agregado un montón de funcionalidades, pero vamos paso a paso. Confirmame que es exactamente el mismo documento, si no, enlaza el que estés usando para hacer una prueba.

Mauricio, pude hacer funcionar tu código. Muchas gracias!! Borré los .py que tenía y cargué todo actualizado, además de estudiar un poco de python.

Hola Mauricio!! Edité la pregunta con un PD para mostrarte las partes del código que no entiendo. Intenté adaptarlo para (macro 1) generar los gráficos a partir de tablas en writer porque lo necesito con urgencia. Y por otro lado (macro 2) pasar desde calc todas las tablas a un writer en que se generen los gráficos en un único documento. Si pudieras orientarme sobre qué estudiar de python te lo agradecería. Saludos

@pea,

¿Cuál es el problema de hacer los gráficos en Calc y generar el documento en PDF?

descripción de la imagen


ATENCIÓN: Si desea dar más detalles a su pregunta, utilice edit en la pregunta o add a comment abajo. Agradecido.

Si la respuesta atendió su necesidad, por favor, haga clic en la bolita Descrição da imagem a la izquierda de la respuesta, para finalizar la pregunta.

Hola Gilberto, ocurre que las tablas, texto y gráficos necesitan ser editables. Por eso no sería una alternativa en generar un PDF. Gracias por tu tiempo!!

@pea,

¡Es más fácil editar tablas y gráficos en Calc que Writer!

Es mucho lo que hay que editar sobre las primeras tablas con frecuencias ya que se generan documentos cómo este:
http://www.ceil-conicet.gov.ar/wp-content/uploads/2017/12/1-Neffa-Henry-Quien-cuida-a-los-que-cuidan.pdf#page=201

Insertando en writer un hoja de cálculo como objeto OLE, debería ser una buena solución.

En Writer al seleccionar: insertar → OLE- > “crear a partir de un archivo” → me inserta la hoja de calc completa. De alguna forma lo podría editar como un documento de writer convencional?

Si haces doble click en el objeto lo puedes editar dentro de writer, aunque sea un fichero de calc. Quizás prefieras para llevarlo con el fichero writer, insertar el objeto creando uno nuevo en vez de enlazar un fichero.