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
.
Instalación de python-docx
El 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
.
Documentos Word con Python
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()
Agregar un título
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)
Agregar un párrafo
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
Agregar listas numeradas y viñetas
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')
Importación de imágenes
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))
Creación de tablas
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.
Guardar el documento
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')
Creación de un documento
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.
Conclusiones
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.
Contenido relacionado
Publicidad