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/
{{variavel}} dentro do corpo do documento e em eventuais tabelas.nome presente na planilha.| 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) |
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()