Generación de documentos Word con Docxtpl en Python

Generación de documentos Word con Docxtpl en Python

Docxtpl es una librería de Python que permite generar documentos Word de forma sencilla y eficiente. Se basa en el concepto de plantillas, que son archivos Word que contienen campos dinámicos que pueden ser sustituidos por valores concretos.

En este tutorial aprenderemos a crear documentos Word con Docxtpl. Para ello, necesitaremos instalar la librería en nuestro entorno Python.

pip install docxtpl

Una vez instalada la librería, podemos empezar a crear nuestras plantillas. Las plantillas de Docxtpl son archivos Word que contienen campos dinámicos. Estos campos están rodeados por llaves ({ y }).

Por ejemplo, la siguiente plantilla contiene un campo dinámico llamado nombre:

<p>Hola, {nombre}.</p>

Para sustituir el valor del campo dinámico, podemos usar la función render() de Docxtpl. Esta función toma dos argumentos: la plantilla y el diccionario con los valores que queremos sustituir.

Por ejemplo, el siguiente código genera un documento Word con el nombre «Juan» en el campo dinámico nombre:

Python
import docxtpl

plantilla = """
<p>Hola, {nombre}.</p>
"""

datos = {"nombre": "Juan"}

documento = docxtpl.render(plantilla, datos)

documento.save("documento.docx")

En este caso, el documento generado tendrá el siguiente aspecto:

Hola, Juan.

Además de los campos dinámicos, las plantillas de Docxtpl pueden contener otros elementos, como texto, imágenes, tablas, etc.

Para obtener más información sobre el uso de Docxtpl, podemos consultar la documentación oficial: https://docxtpl.readthedocs.io/en/latest/.

Ejemplo práctico

En este ejemplo, crearemos un documento Word que contenga una lista de personas. La plantilla del documento tendrá el siguiente aspecto:

<table>
    <tr>
        <th>Nombre</th>
        <th>Apellido</th>
    </tr>
    {% for persona in personas %}
        <tr>
            <td>{{ persona.nombre }}</td>
            <td>{{ persona.apellido }}</td>
        </tr>
    {% endfor %}
</table>

El diccionario de datos contendrá una lista de personas. Cada persona tendrá los siguientes campos:

  • nombre: El nombre de la persona.
  • apellido: El apellido de la persona.

El siguiente código genera el documento Word:

Python
import docxtpl

plantilla = """
<table>
    <tr>
        <th>Nombre</th>
        <th>Apellido</th>
    </tr>
    {% for persona in personas %}
        <tr>
            <td>{{ persona.nombre }}</td>
            <td>{{ persona.apellido }}</td>
        </tr>
    {% endfor %}
</table>
"""

datos = {"personas": [
    {"nombre": "Juan", "apellido": "Pérez"},
    {"nombre": "María", "apellido": "González"},
]}

documento = docxtpl.render(plantilla, datos)

documento.save("documento.docx")

El documento generado tendrá el siguiente aspecto:

| Nombre | Apellido |
|---|---|
| Juan | Pérez |
| María | González |

Conclusiones

Docxtpl es una librería muy útil para generar documentos Word de forma sencilla y eficiente. Con ella, podemos crear documentos personalizados con el contenido que necesitemos.