Descrição:

Este script automatiza o preenchimento de contratos Word (.docx) com base nos dados de uma planilha Excel. O modelo de contrato deve conter variáveis no formato {{variavel}}, e a planilha deve ter duas colunas: uma com os nomes das variáveis e outra com os valores correspondentes.

💻 Você pode testar essa ferramenta agora mesmo no navegador:

👉 https://geradorcontrato.streamlit.app/


Como funciona:


Estrutura da planilha esperada:

Variável Valor
nome João da Silva
cpf 123.456.789-00
data 03/07/2025
(1ª coluna = nomes das variáveis, 2ª coluna = valores a serem inseridos no Word)

Código completo:

python
CopyEdit
import pandas as pd
from docx import Document
import os
from tkinter import Tk, filedialog

def selecionar_arquivo(titulo, tipos):
    root = Tk()
    root.withdraw()
    caminho = filedialog.askopenfilename(title=titulo, filetypes=tipos)
    root.destroy()
    return caminho

def preencher_um_contrato():
    print("Selecione o modelo Word com as variáveis no formato {{variavel}}")
    modelo_path = selecionar_arquivo("Selecione o Modelo Word", [("Word files", "*.docx")])

    print("Selecione a planilha Excel com as variáveis e valores")
    planilha_path = selecionar_arquivo("Selecione a Planilha Excel", [("Excel files", "*.xlsx")])

    # Lê só a primeira aba da planilha
    df = pd.read_excel(planilha_path, sheet_name=0)

    # Transforma em dicionário
    variaveis = pd.Series(df.iloc[:, 1].values, index=df.iloc[:, 0]).to_dict()

    # Carrega o modelo
    doc = Document(modelo_path)

    # Substitui variáveis no texto
    for paragrafo in doc.paragraphs:
        for chave, valor in variaveis.items():
            paragrafo.text = paragrafo.text.replace(f"{{{{{chave}}}}}", str(valor))

    # Substitui variáveis em tabelas também
    for tabela in doc.tables:
        for linha in tabela.rows:
            for celula in linha.cells:
                for chave, valor in variaveis.items():
                    celula.text = celula.text.replace(f"{{{{{chave}}}}}", str(valor))

    # Nome do contrato
    nome_cliente = variaveis.get("nome", "Contrato")
    nome_arquivo = f"{nome_cliente}.docx"

    os.makedirs("Contrato_Gerado", exist_ok=True)
    caminho_saida = os.path.join("Contrato_Gerado", nome_arquivo)
    doc.save(caminho_saida)

    print(f"✅ Contrato gerado com sucesso: {caminho_saida}")

# Executar
preencher_um_contrato()