Página 1 de 1

Insertar macros en Python dentro de un archivo de Calc

Publicado: Dom Ene 12, 2014 6:37 am
por Henry Sanchez
Hola grupo,

Estoy interesado en incluir algunas macros que estoy traduciendo de OOOBasic a Python dentro de archivos de Calc, para que las macros esten disponibles en cualquier equipo donde se abra el archivo.

Como la interfaz de Calc solo permite este tipo de operaciones con archivos de OOOBasic, me guie por un documento publicado por la wiki de OpenOffice.org: "https://wiki.openoffice.org/wiki/ES/Man ... imeraMacro"

Segui los pasos indicados:
Un archivo de Apache OpenOffice es realmente un archivo ZIP con una estructura determinada, por lo que puedes, también, manipularlos con tu programa favorito para este tipo de archivos. Crea y guarda un archivo nuevo de Calc, ciérralo y ábrelo ahora con tu programa ZIP. Crea las carpetas Scripts/python en la raíz del archivo. Dentro de esta carpeta agrega los archivos con las macros, para nuestro ejemplo holamundo.py. Ahora, edita el archivo manifest.xml que esta en la carpeta META-INF, a cuyo contenido agrégale las siguientes líneas, justo antes del cierre </manifest:manifest>.
<manifest:file-entry manifest:media-type="" manifest:full-path="Scripts/python/nombre_modulo.py"/>
<manifest:file-entry manifest:media-type="application/binary" manifest:full-path="Scripts/python/"/>
<manifest:file-entry manifest:media-type="application/binary" manifest:full-path="Scripts/"/>
</manifest:manifest>

Guarda los cambios y cierra el archivo.


Cada vez que realizo, estas acciones y trato de abrir el archivo resultante con Calc. El programa me informa que el archivo "esta corrupto" y permite la reparacion del mismo. Despues de esto, funciona perfectamente, sin embargo, es una molestia tener que estarlo reparando cada vez que hago una edicion a las macros.
He ensayado con WinRar y 7Zip con los mismos resultados.
Realmente no se por que se corrompe el archivo. Si alguien puede darme una idea se lo agradeceria.

Por otra parte, veo que descomprimir el archivo, editar el manifiesto, cada vez que se desee insertar un modulo al archivo y la creacion de las 2 carpetas (para cada archivo con macros), es un poquito tediosa. Pienso que esto puede automatizarse facilmente, pero antes de acometer esta labor, me pregunto si alguien con mas experiencia que yo ya lo haya echo, y compartido con el grupo.

Saludos,

Henry Sanchez

Re: Insertar macros en Python dentro de un archivo de Calc

Publicado: Dom Ene 12, 2014 6:47 pm
por mauricio
Hola Henry...

La guía funciona, lo he comprobado una buena cantidad de veces, si te da el mensaje de que el archivo esta corrupto, ten por seguro que algo no esta correcto...

Dado que el 99.99% de las macros que desarrollo en Python lo hago como una extensión de AOO, tengo el script para automatizar esto, pero para agregar una macro a un archivo no, aunque el proceso es muy similar, dejame hacer unas pruebas y lo comparto en este hilo... por lo pronto, mi recomendación es que edites tus macros en tu área de usuario, así puedes desarrollarla hasta que la termines y estés seguro de su correcto funcionamiento, al final solo la integras al archivo...

Saludos

Re: Insertar macros en Python dentro de un archivo de Calc

Publicado: Lun Ene 13, 2014 1:52 am
por Henry Sanchez
Gracias por tu respuesta Mauricio.

Voy a usar WinZip para ver que pasa y tambien voy a seguir tu sugerencia de trabajar en la carpeta de mis macros hasta que esten listas.

Antes de tratar de insertar macros en Python dentro de un archivo de Calc, no tenia ni idea de que este tipo de archivos son realmente una agrupacion comprimida de otros archivos y carpetas. Es un tema interesante y me gustaria saber mas al respecto. Donde puedo encontrar mas detalles respecto a los archivos que conforman un libro de trabajo de Calc?.

Otra duda que tengo respecto a las macros escritas en Python para ser usadas en Calc, es saber si es indispensable haber instalado previamente Python en el equipo donde se piensan ejecutar dichas macros o es que Calc ya incorpora el interprete de Python con tan solo instalar LubreOffice. Para probar esto tendria que desistalar Python de alguno de los equipos en los que trabajo, cosa que me resisto a hacer. Trate de probar esto en un equipo de un amigo que no ha instalado Python, pero resulta que tampoco tenia instalado LibreOffice :ouch:

Saludos,

Henry Sanchez

Re: Insertar macros en Python dentro de un archivo de Calc

Publicado: Lun Ene 13, 2014 6:13 am
por mauricio
Aquí puedes encontrar la especificación para ODF, entre ellos, ODS de Calc, pero, no es una tarea sencilla: https://www.oasis-open.org/standards#opendocumentv1.2

No, no es indispensable, tanto AOO, como LibO, incorporan su propio interprete python, en algunas distribuciones linux se usa el interprete local, pero si descargas directamente de las páginas oficiales, siempre incluye el interprete, por lo que no es necesario que lo tengas previamente instalado, o desintalar si ya lo tienes...

Por favor, recuerda, una pregunta por tema, una respuesta por tema...

Saludos

Re: Insertar macros en Python dentro de un archivo de Calc

Publicado: Mar Abr 25, 2017 12:44 pm
por circulosmeos
Hola,
Con este script de Python: https://github.com/circulosmeos/LibreOfficeScriptInsert, es más sencillo añadir una macro a un fichero Calc.
¡Saludos!

Re: Insertar macros en Python dentro de un archivo de Calc

Publicado: Mar Abr 25, 2017 9:14 pm
por fornelasa
Solo para el registro.
recordemos que adicionalmente hay una extensión que tal vez puede ayudar.
https://forum.openoffice.org/es/forum/v ... HON#p55495
https://forum.openoffice.org/en/forum/v ... 46#p403289
Saludos.

Re: Insertar macros en Python dentro de un archivo de Calc

Publicado: Lun May 29, 2017 12:25 pm
por SLV-es
Henry Sanchez escribió: Voy a usar WinZip...
Utilicemos 7zip.org, que es gratuíto y software libre. WinZip no lo es.

Nota: un error común es comprimir seleccionando la carpeta. Hay que comprimir seleccionando los documentos y carpetas que están dentro de la carpeta.
Con las extensiones ocurre eso mismo.
Quizás sea ese el problema por el que te dice que el archivo está dañado.