python-docx
Tablas y gráficos
Antes de nada decir que empleo el término gráfico como sinónimo de imagen, con independencia de que esta imagen represente un paisaje, una persona o un gráfico estadístico. Dicho esto, en esta entrada trataré sobre estos posibles contenidos de un documento de texto por ser elementos que se pueden necesitar para la elaboración de los documentos que solemos crear como SEO.
Desde esta perspectiva eminentemente práctica, empecemos por incluir gráficos (imágenes) en nuestro documento; para ello, y dando por resueltos los procesos previos de creación del documento y la inclusión de los contenidos ya conocidos por la entrada anterior, para incluir una imagen en un texto usaremos add_picture(), que precisa de un único parámetro, un string con la dirección de la imagen, incluyendo nombre y extensión, si bien cuando la imagen está en el mismo directorio que el script, es suficiente con el nombre y extensión.
Podemos usar dos parámetros complemetarios (o sólo uno) con la indicación dimensional (height y/o width) y el o los valores necesarios para dimensionar la imagen en pulgadas (v.g. width=Inches(1.25)). Así es en nuestro este caso (documento.add_picture('Aprendizaje.jpg', width=Inches(1.25))) y por ese al inicio del script importamos from docx.shared import Inches
Sigamos ahora con el uso de tablas, empezando por los datos que ésta va a contener, los cuales están contenidos en una tupla de tuplas que contiene tantos registros como deseemos y cada uno de ellos tantos elementos como columnas va a tener nuestra tabla:
registros = (('3', 'Entrevistas', 101),('4', 'Reuniones', 42),('5','Evaluaciones', 36))
No es la forma más sencilla de crear una tabla, pero así aprendemos cómo podemos manejar el acceso a sus celdas para introducir los datos. En realidad crear la tabla es mucho más sencillo, siendo suficiente con emplear la función add_table(), que requiere dos parámetros tipo integer: las columnas y las filas (tabla = documento.add_table(rows=1, cols=3). Las complicaciones empiezan cuando decidimos que nuestra tabla tenga encabezado, ya que se requiere una variable encabezado = tabla.rows[0].cells, gracias a la cual podemos acceder a las celdas de primera fila rows[0].cells de la tabla creada. Sobre esta variable iremos identificando cada una de las celdas del encabezado e incluyendo en ellas su texto encabezado[0].text = 'Identificador'.
Para incluir el contenido de nuestros registros en la tabla utilizamos un bucle for id, cont, num in registros:. Básicamente lo que hace este bucle es recorrer nuestra base de datos, elemento por elemento (id, cont, num in registros:) para posicionarlos según lo establecido en row_cells = tabla.add_row().cells.
Obsérvese que esta instrucción row_cells = tabla.add_row().cells es muy parecida, aunque en realidad muy diferente, a la que nos sirvió para crear el encabezado encabezado = tabla.rows[0].cells, por lo que hay que tener cuidado para no confundirlas.
Este uso del bucle puede resultarnos un poco complicado en estos momentos (aun estamos empezando a programar en Python), así que necesitamos conocer otra forma de utilizar una tabla para una función muy común en la composición de un texto: posicionar texto de forma tabular. Para estos casos podemos trabajar con un código más sencillo. Veamos:
- Creamos la tabla igual que antes
tabla2 = documento.add_table(rows = 2, cols = 2) - Accedemos a la primera fila
celdas0 = tabla2.rows[0].cellscon el mismo procedimiento que antes empleamos para crear el encabezado - Y posicionamos el contenido textual en las celdas de esa fila
celdas0[0].text = "Primera"
Deberemos repetir el procedimiento para cada una de las filas celdas1 = tabla2.rows[1].cells y sus respectivas celdas, ya que por algo es un procedimiento manual, pero estoy seguro que dentro de poco sabremos implementar un bucle para agilizar el procedimiento, no tan elegante y complejo como el presentado antes, pero suficiente para nuestros fines
Documento. Desde este enlace puedes ver y descargar el script que contiene el código de esta entrada.
No hay comentarios:
Publicar un comentario
Comenta esta entrada