Escribiendo ficheros docx de Word con Python. Capítulo VI – Enums y Shares

En general, lo que hemos visto hasta ahora, lo podíamos hacer prácticamente todo desde el objeto Document. Desde el mismo podemos acceder a otros objetos como los párrafos, tablas, secciones, run‘s,…

Pero, en el anterior capítulo, vimos que empezaron a salir algunos nombres raros como Cm, Pt o WD_PARAGRAPH_ALIGNMENT.

Vamos a importar la biblioteca y ver un poco de todo lo que dispone:

Lo anterior nos mostrará una serie de cosas.

Vemos que tenemos disponibles dos clases que no vamos a comentar y la función Document que nos crea una instancia del objeto Document (sí, se llaman igual la función y la clase), es decir, prácticamente todo lo que necesitamos lo podemos obtener con la función Document que nos devolverá el objeto instanciado. Todo lo demás que está disponible son una serie de módulos. Vamos a repasarlos por encima:

  • api: básicamente nos ofrece la función Document.
  • blkcntnr: aquí tenemos la clase BlockItemContainer que sirve para los contenedores como el cabecero, la celda de una tabla, el cuerpo del documento,… Dispone de métodos como add_paragraph o add_table.
  • compat: compatibilidad entre Python 2/3.
  • dml: utilidades para trabajar con color.
  • document: aquí es donde se define la clase Document.
  • enum: este lo vamos a ver a continuación algo más de detalle.
  • exceptions: varias excepciones.
  • image: nos proporciona objetos para trabajar con imágenes en los formatos más conocidos como tiff, jpg, bmp,…
  • opc: utilidades para trabajar con la Open Packaging Convention.
  • oxml: utilidades para trabajar con el Office Open XML.
  • package: utilidades para trabajar con la Open Packaging Convention.
  • parts: las diferentes partes que forman el documento.
  • section: la clase Section se encuentra aquí.
  • settings: la clase Settings se encuentra aquí.
  • shape: la clase InlineShape que usamos para añadir imágenes se encuentra aquí.
  • shared: aquí encontramos funcionalidades que se usan por los diferentes módulos y que vamos a ver en algo más de detalle a continuación.
  • styles: aquí se encuentran definidos los estilos y la clase Style.
  • text: aquí se encuentran definidas cosas como Paragraph, Table, Run.

Como veis, todo está pensado para que haya un único punto de entrada que nos sirve de proxy para acceder a las diferentes partes del documento definidas como distintas clases. El resto de la biblioteca es para poder leer y escribir el documento, comprimirlo o descomprimirlo y son cosas que no necesitamos tocar. Lo que más usamos (y haciendo el gráfico de cabeza…) sería algo así:

Además de lo anterior, lo cual hemos ido viendo por encima en anteriores secciones. hemos pasado por encima sobre algunas otras cosas que obtenemos de los módulos shared y enum.

Módulo shared

Lo más importante que tenemos en este módulo son formas de establecer tamaños o medidas de forma que el resto de la biblioteca lo pueda entender. Algunas de las clases más importantes contenidas aquí son:

Lo anterior mostrará:

Todas las clases anteriores derivan de Length.

Lo anterior mostrará:

Mostrará:

Mostrará:

Todo lo anterior sería 1 cm expresado de diferente forma. Si miramos internamente:

Mostraría:

Dentro del modulo shared vemos que tenemos también la clase RGBColor. Esta clase nos ayuda a usar colores en nuestro documento y que luego la librería lo pueda usar internamente.

Lo anterior mostrará:

Módulo enum

Este módulo son enumeraciones de todo tipo que se usan en la librería. Normalmente, la mayoría no es necesario conocerlas en detalle pero algunas de ellas si que son interesantes que las conozcamos.

Al siguiente, dml, no le deberíamos prestar mucha atención.

Lo anterior muestra:

El siguiente, section, sí que puede resultar más interesante. La ayuda nos dice:

Veamos las enumeraciones que hay en enum.section y sus valores:

Lo anterior mostraría algo parecido a:

Tenemos valores para la sección donde podemos definir si la sección será en apaisado o en vertical, si el cabecero o pie de página estará en las paginas, pares, impares, en todas,…

El siguiente, shape, se usa para definir imágenes. La ayuda nos dice:

La ayuda nos dice:

El siguiente, style, se usa para definir temas relacionados con el estilo. La ayuda nos dice:

Lo anterior muestra:

Si miramos lo que hay:

Lo anterior nos da:

Los nombres que vemos aquí están relacionados con los estilos que podemos ver, por ejemplo, en la UI de Microsoft Word y también podemos ver los contextos en los que se pueden aplicar los estilos, a nivel de párrafo, de carácter, de tabla,…

El siguiente, table, se usa para definir temas relacionados con las tablas. La ayuda nos dice:

Miramos lo que hay:

Lo anterior mostrará:

Toda una serie de cosas para poder trabajar con tablas y definir la altura de celdas, la alineación,…

El siguiente, text, se usa para definir temas relacionados con texto. La ayuda nos dice:

La documentación dice:

Si inspeccionamos lo que hay:

Veremos algo como:

Por último, aquí podemos ver un montón de cosas relacionadas con el texto.

Recapitulando

La biblioteca está pensada para que tenga un único punto de entrada. Si nuestro documento va a ser algo sencillo no necesitamos más que usar doc = docx.Document() y desde esa instancia podemos ir creándolo todo.

Si necesitamos meternos en harina y toquetear cosas tenemos toda una cantidad de nombres (enumeraciones) que nos deberían ayudar a hacer lo que tenemos en mente, siempre que el formato docx lo permita.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

six + one =