• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Encuestas: Tamaño de Muestra
    • Lotería: Probabilidad de Ganar
    • Reparto de Escaños (D’Hondt)
    • Tres en Raya con IA
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • Excel
  • Matlab

Creación de documentos Word con Python

septiembre 7, 2020 Por Daniel Rodríguez 14 comentarios
Tiempo de lectura: 6 minutos

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

  • 1 Instalación de python-docx
  • 2 Documentos Word con Python
    • 2.1 Agregar un título
    • 2.2 Agregar un párrafo
    • 2.3 Agregar listas numeradas y viñetas
    • 2.4 Importación de imágenes
    • 2.5 Creación de tablas
    • 2.6 Guardar el documento
  • 3 Creación de un documento
  • 4 Conclusiones

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.

Publicidad


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.

Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey
En Analytics Lane
Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey

# Añadimos un titulo al documento, a nivel 0
document.add_heading('Documento creado con Python', 0)

Publicidad


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')

Publicidad


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.

Publicidad


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.

Documento de Word creado con Python
Documento de Word creado con Python

Publicidad


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.

Imagen de Devanath en Pixabay

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 4.5 / 5. Votos emitidos: 2

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey
  • Cómo calcular el tamaño de la muestra para encuestas
  • Curiosidad: La Ley de Twyman y la trampa de los datos “interesantes”
  • Copias de seguridad automáticas en SQL Server con rotación de archivos
  • Curiosidad: La Paradoja de Simpson, o por qué no siempre debes fiarte de los promedios
  • Error npm ERR! code EACCES al instalar paquetes en Node.js: Cómo solucionarlo paso a paso
  • Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo
  • ¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia
  • Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia

Publicado en: Python

Interacciones con los lectores

Comentarios

  1. Aliel dice

    marzo 9, 2021 a las 10:00 pm

    Hola, ¿en el caso de tener un CRUD ya hecho como podría hacer un reporte del mismo con python-docx?

    Responder
    • Daniel Rodríguez dice

      marzo 9, 2021 a las 11:14 pm

      En caso de tener los datos en memoria no hay mas que importar la librería y crear un documento tal como se explica en la entrada.

      Responder
  2. felipe dice

    mayo 19, 2021 a las 9:40 pm

    En el caso que quiera darle estilo al word, como seria?

    Responder
    • Daniel Rodríguez dice

      mayo 20, 2021 a las 9:26 am

      Para modificar el formato tendrás modificar las propiedades de los objetos creados. Por ejemplo, los párrafos tiene la propiedad ParagraphFormat (https://python-docx.readthedocs.io/en/latest/api/text.html#paragraphformat-objects), en la que existen múltiples opciones para configurar el formato.

      Responder
  3. Gongora Ed dice

    septiembre 4, 2021 a las 7:00 pm

    Muy buen aporte muchas gracias. Para aquellas personas que queremos mantenernos dentro del software libre, ¿sabes si hay alguna herramienta similar a esta pero para usar con LibreOffice? (por ejemplo para hacer documentos de LibreOffice Writer o planillas de cálculo de LibreOffice Calc?

    Responder
    • Daniel Rodríguez dice

      septiembre 5, 2021 a las 1:35 pm

      Hay soluciones para trabajar con el formato OpenDocument desde Python como odfpy (https://github.com/eea/odfpy), pero nunca las he usado.

      Responder
  4. Marco Polama dice

    mayo 9, 2022 a las 4:20 am

    Excelente aporte!, una pregunta, se puede insertar objetos al documento .doc, algo asi como incrustar un pdf, excel u otro archivo?

    Responder
    • Daniel Rodríguez dice

      mayo 9, 2022 a las 9:54 am

      Gracias, que yo sepa no se puede agregar objetos al documento Word con python-docx.

      Responder
  5. Álex dice

    julio 17, 2022 a las 5:30 pm

    Hola,

    ¿Sabes si hay algún problema para escribir fórmulas matemáticas? Word tiene la opción de añadir fórmulas, ¿cómo podemos hacer esto desde Python?

    Gracias

    Un saludo

    Responder
    • Daniel Rodríguez dice

      julio 18, 2022 a las 11:06 pm

      No he visto ningún método para crear ecuaciones de Word en la documentación del paquete. Generalmente lo suelo usar para generar informes automáticos. Una opción puede ser crear las ecuaciones con LaTeX, expórtalas a una imagen y adjuntarlas al documento.

      Responder
  6. Rafael Landy dice

    agosto 2, 2022 a las 6:25 am

    Les puede interesar: AUTOMATIZA WORD CON PYTHON

    Enlace video 1:
    https://www.youtube.com/watch?v=70eyxpF-h8g&t=67s
    Enlace video 1:
    https://www.youtube.com/watch?v=o5zM3T9Fpcc

    Responder
  7. Edu Morales dice

    septiembre 10, 2022 a las 3:46 pm

    Por si les interesa, explico todo esto paso a paso en el siguiente video:

    https://www.youtube.com/watch?v=fBrRZGTSEAg&t=685s

    Responder
  8. Chiche dice

    enero 14, 2025 a las 5:11 pm

    amigo como se haria para colocar encabezado y pide pagina además de exportarlo de una base de datos como mysql gracias

    Responder
    • Daniel Rodríguez dice

      enero 15, 2025 a las 9:32 pm

      Hola, agregar encabezados y pies de página es sencillo. python-docx incluye propiedades llamadas header y footer que permiten insertar texto en estas secciones, como se muestra en el siguiente ejemplo:

      from docx import Document

      # Crear un documento nuevo o cargar uno existente
      doc = Document()

      # Agregar contenido al encabezado
      doc.sections[0].header.paragraphs[0].text = "Este es el encabezado del documento"

      # Agregar contenido al pie de página
      doc.sections[0].footer.paragraphs[0].text = "Este es el pie de página del documento"

      # Guardar el documento
      doc.save("encabezado_y_pie.docx")

      Para trabajar con una base de datos, el proceso es algo más complejo. Primero, necesitas conectarte a la base de datos (aunque no trabajo específicamente con MySQL, el procedimiento es similar al de otras bases de datos). Una vez conectado, puedes descargar los datos y usarlos para crear una tabla en el documento. Si descargas los datos en un DataFrame, el proceso no es complicado. Por ejemplo, puedes usar:

      # Agregar un título al documento
      doc.add_heading("Tabla generada desde un DataFrame", level=1)

      # Crear una tabla en el documento
      table = doc.add_table(rows=1, cols=len(df.columns))

      # Agregar encabezados a la tabla
      header_cells = table.rows[0].cells
      for i, column_name in enumerate(df.columns):
      header_cells[i].text = column_name

      # Agregar las filas de datos
      for _, row in df.iterrows():
      row_cells = table.add_row().cells
      for i, value in enumerate(row):
      row_cells[i].text = str(value)

      Si este tema resulta de interés, podríamos desarrollar una entrada más detallada para explorarlo en profundidad.

      Responder

Deja una respuesta Cancelar la respuesta

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

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia

octubre 2, 2025 Por Daniel Rodríguez

¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia

septiembre 30, 2025 Por Daniel Rodríguez

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

septiembre 25, 2025 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas publicado el mayo 10, 2019 | en Python
  • Gráficos de barras en Matplotlib publicado el julio 5, 2022 | en Python
  • Diferencia entre R2 y R2 ajustado en modelos de regresión publicado el marzo 8, 2024 | en Ciencia de datos
  • ¿Cómo saber la versión de Pandas o cualquier otra librería en Python? publicado el septiembre 25, 2023 | en Python
  • Cómo encontrar la posición de elementos en una lista de Python publicado el abril 12, 2021 | en Python

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.5 (10)

Diferencias entre var y let en JavaScript

Publicidad

Comentarios recientes

  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown
  • Daniel Rodríguez en Tutorial de Mypy para Principiantes

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2025 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto