Los archivos de Microsoft Word son un estándar para el intercambio de documentos de texto enriquecido. Pudiéndose incluir en los mismos imágenes, tablas y lista, entre otros tipos recursos. Además, es un formato que el rector del mismo puede editar con facilidad, a diferencia de los archivos en PDF. Por lo que tener la posibilidad de crear documentos de Word con Python nos puede facilitar la creación de informes en este formato. Algo que se puede conseguir con el paquete de Python python-docx.
Tabla de contenidos
python-docxEl paquete python-docx se puede instalar fácilmente con pip, para lo que sera necesario escribir en la terminal el comando
pip install python-docx
Es necesario instalar el paquete python-docx, aunque existe un paquete que se llama docx este último es una versión legacy de python-docx.
Para crear un documento de Microsoft Word con Python tenemos que importar Document de docx. Este constructor es el que crea el documento. Documento al que ahora tendremos que añadir las propiedades que nos interesen.
from docx import Document # Creación del documento document = Document()
Una vez hecho esto se puede añadir el título al documento, para lo que se utiliza el método add_heading. Un método que tiene dos propiedades, la primera el texto del propio título y el segundo el nivel. Usándose 0 para el título principal y 1 para el título de nivel 1, 2 para el de nivel 2 y así consecutivamente.
# Añadimos un titulo al documento, a nivel 0
document.add_heading('Documento creado con Python', 0) Posiblemente lo que más usemos sean los párrafos, los cuales se crean con el método add_paragraph. Si no necesitamos usar formatos, se puede incluir el contenido del párrafo directamente en la propiedad del método. Pero, si queremos usar negritas o itálicas en parte del párrafo será necesario obtener el objeto que devuelve este método para poder editarlo.
En el objeto que devuelve el método add_paragraph se puede agregar más contenido con el método add_run. Al igual que el caso anterior el texto se agrega mediante la propiedad y pudiéndose modificar cualquier propiedad de este como bold o italic. Como se muestra en el siguiente ejemplo:
# Añadimos un párrafo
p = document.add_paragraph('El contenido de los párrafos se añadir en varias líneas. ')
p.add_run('Pudiéndose configurar que el texto tenga formato tipo ')
p.add_run('negrita').bold = True
p.add_run(' o ')
p.add_run('itálica.').italic = True Tanto las listas numeradas como las viñetas son párrafos con un estilo particular que se debe indicar mediante el parámetro opcional style del método add_paragraph. En concreto el estilo de las listas enumeradas es List Number y el de las viñetas es List Bullet. Las formas de crear ambas listas se pueden ver en el siguiente ejemplo:
# Para indicar subtitulo se indica el nivel 1
document.add_heading('Subtitulo', level=1)
document.add_paragraph('Ahora se puede crear una enumeración')
document.add_paragraph('Uno', style='List Number')
document.add_paragraph('Dos', style='List Number')
document.add_paragraph('Tres', style='List Number')
document.add_paragraph('O viñetas')
document.add_paragraph('Manzana', style='List Bullet')
document.add_paragraph('Pera', style='List Bullet')
document.add_paragraph('Naranja', style='List Bullet') Una parte importante de los informes son las imágenes. Ya que facilitan la inclusión de gráficas, fotografías y otros recursos gráficos. Para esto contamos con el método add_picture al cual se es necesario pasarle como primer parámetro la ruta, opcionalmente se le puede indicar el tamaño que debe tener la imagen en el documento mediante las propiedades width o height. Tamaños que se deben indicar con objetos Cm, para indicar el tamaño en centimetros, Inches, para indicar el tamaño en pulgadas, u otros que podemos encontrar en el espacio de nombres docx.shared. Así para importar una imagen que tendrá un tamaño de 5 centímetros se puede usar el siguiente ejemplo
from docx.shared import Cm
# Imágenes
document.add_heading('Imágenes', level=1)
document.add_picture('analytics_lane.jpg', width=Cm(5)) Otros recursos habituales en los documentos de texto son las tablas. Objetos que en este caso requieren algo más de trabajo. Para crearlas primero es necesario crear una tabla mediante el método add_table que tiene dos parámetros: el número de filas (rows) y columnas (cols). El número de filas no es importante ya que siempre se pueden agregar más filas a las tablas.
Para trabajar con las tablas es importante guardar el objeto que nos devuelve el método add_table, ya que lo necesitamos para agregar el contenido. Este objeto tiene la propiedad rows que es una lista que tiene la propiedad cells en donde se encuentra cada una de las celdas de la tabla. El texto que incluimos en la tabla se tiene que indicar en la propiedad text de cada celda. Por ejemplo, para incluir los títulos de una tabla se hará.
# Tablas
document.add_heading('Tablas', level=1)
data = (('Manzana', 12), ('Pera', 5), ('Naranja', 12))
table = document.add_table(rows=1, cols=2)
table.rows[0].cells[0].text = 'Fruta'
table.rows[0].cells[1].text = 'Cantidad' Ahora si tenemos una lista o una tupla con los datos solo es necesario iterar sobre ella creando una fila en cada interacción mediante el método add_row. Fila que contendrá una lista con las celdas de esta.
for prod, numbr in data:
row_cells = table.add_row().cells
row_cells[0].text = prod
row_cells[1].text = str(numbr) Como se muestra en el ejemplo es importante notar que la propiedad text de las celdas es un texto, por lo que si tenemos los datos en formato numérico es necesario convertirlos antes de añadirlos.
Finalmente tendremos que guardar el documento para poder enviarlo. Lo que se puede hacer con el método save en el que únicamente se le debe indicar el nombre del archivo en el que se desea guardar este.
document.save('ejemplo.docx') Posiblemente la mejor manera de ver todo esto es mediante un ejemplo. Si juntamos todo los que hemos hecho hasta ahora tenemos el siguiente código de Python.
from docx import Document
from docx.shared import Cm
# Creación del documento
document = Document()
# Añadimos un titulo al documento, a nivel 0
document.add_heading('Documento creado con Python', 0)
# Añadimos un párrafo
p = document.add_paragraph('El contenido de los párrafos se añadir en varias líneas. ')
p.add_run('Pudiéndose configurar que el texto tenga formato tipo ')
p.add_run('negrita').bold = True
p.add_run(' o ')
p.add_run('itálica.').italic = True
# Para indicar subtitulo se indica el nivel 1
document.add_heading('Subtitulo', level=1)
document.add_paragraph('Ahora se puede crear una enumeración')
document.add_paragraph('Uno', style='List Number')
document.add_paragraph('Dos', style='List Number')
document.add_paragraph('Tres', style='List Number')
document.add_paragraph('O viñetas')
document.add_paragraph('Manzana', style='List Bullet')
document.add_paragraph('Pera', style='List Bullet')
document.add_paragraph('Naranja', style='List Bullet')
# Imágenes
document.add_heading('Imágenes', level=1)
document.add_picture('analytics_lane.jpg', width=Cm(5))
# Tablas
document.add_heading('Tablas', level=1)
data = (('Manzana', 12), ('Pera', 5), ('Naranja', 12))
table = document.add_table(rows=1, cols=2)
table.rows[0].cells[0].text = 'Fruta'
table.rows[0].cells[1].text = 'Cantidad'
for prod, numbr in data:
row_cells = table.add_row().cells
row_cells[0].text = prod
row_cells[1].text = str(numbr)
document.save('ejemplo.docx') Un código que sí lo ejecutamos genera el siguiente documento de Word.
En esta entrada hemos visto cómo crear documentos de Word con Python. Una herramienta que nos facilita la creación de informes automáticos de los resultados de nuestro código. Algo que nos puede ahorrar mucho tiempo y que tiene muchas más posibilidades como se puede ver en la documentación del paquete.
Lo que hemos visto es un complemento a la creación de informes con Excel, los cuales también puede ser complejos con múltiples tablas, ya que en el caso de Word se puede incluir texto e imágenes además de los datos.
El volumen de datos que las organizaciones generan y deben manejar crece día a día:…
Cuando escuchamos la palabra “azar”, pensamos en lo impredecible: una moneda que gira en el…
Una nueva vulnerabilidad crítica ha sido detectada en MLflow, la popular plataforma de código abierto…
En estadística, los valores atípicos —también llamados outliers— son esos datos que se alejan “demasiado”…
Vivimos en un mundo cada vez más digital, donde gestionamos decenas (o incluso cientos) de…
Aunque Python y JavaScript son lenguajes muy distintos en su propósito y ecosistema, no es…
This website uses cookies.