PTENES
MÓDULO 3.3

📄 La skill de documentos (DocX/PPTX/Excel/PDF)

Los entregables que abre el cliente —Word, PowerPoint, Excel, PDF— se crean con Python, no con Markdown sin procesar. Aquí aprendes las cuatro bibliotecas y las agrupas en una skill: generar-entregable.

6
Temas
~45
Minutos
Intermedio
Nivel
Código
Tipo
1

🎁 Por qué generar documentos mediante programación

El cliente no abre un .md. Abre un .docx, un .pptx, una hoja de cálculo .xlsx o uno .pdf. Generar mediante código significa obtener resultados con formato, repetibles y con tu marca: eso es exactamente lo que hace que el paquete parezca una consultoría de primer nivel y no un borrador de chat.

Markdown entregable sin procesar gerar-entregavel la skill de docs .docx .pptx .xlsx .pdf

La base es sencilla: un entorno virtual con las cuatro bibliotecas instaladas. Claude Code se encarga de esto una vez; después solo tienes que generar.

// configuración: venv + las 4 bibliotecas

python3 -m venv venv
source venv/bin/activate
pip install python-docx reportlab openpyxl python-pptx

✗ Markdown sin formato

  • ✗El cliente ve texto de chat, no un entregable
  • ✗Sin marca, sin tabla con formato, sin fórmula
  • ✗No se abre directamente en Word/PowerPoint/Excel

✓ Documento generado

  • ✓Formateado, con tu identidad visual
  • ✓Repetible: mismo código, nuevo cliente
  • ✓Se abre directamente: parece una consultoría de primer nivel

💡 Consejo práctico

No escribes este código a mano. Pídele a Claude Code «crea el venv e instala las 4 libs de documentos»; lo ejecuta, resuelve los conflictos con el Python del sistema y te deja todo listo para generar. Tu función es dirigir el formato de salida, no memorizar la API.

Formateado

marca + estilo

Repetible

1 código, N clientes

4 formatos

docx/pptx/xlsx/pdf

Profesional

lo que abre el cliente

2

📘 python-docx — informes de Word

Esta es la biblioteca de informes. Creas un Document(), apila headings (nivel 0 = título, 1-9 = secciones), párrafos, tablas y runs con formato (negrita, color). Al final, doc.save(). Es lo que genera el Informe final y el SOW de la Fábrica.

// python-docx: título, sección, tabla y run con formato

from docx import Document
from docx.shared import Pt, RGBColor

doc = Document()
doc.add_heading('Relatório de Estratégia de IA', level=0)
doc.add_heading('Sumário Executivo', level=1)
doc.add_paragraph('Texto do relatório aqui.')

table = doc.add_table(rows=4, cols=3)
table.style = 'Table Grid'

p = doc.add_paragraph()
run = p.add_run('Destaque')
run.bold = True
run.font.color.rgb = RGBColor(0x00, 0x00, 0xFF)

doc.save('relatorio.docx')

Fíjate en tres cosas: el level controla la jerarquía, table.style = 'Table Grid' define los límites, y el run es la unidad mínima donde aplicas negrita y color. Esa misma estructura se convierte en el Informe final y el documento de propuesta (SOW).

💡 Nota

Los estilos prediseñados ahorran trabajo: 'List Bullet' e 'List Number' para listas, 'Heading 1' / 'Heading 2' para secciones. Describes la estructura del informe; Claude Code elige los estilos.

Document()

crea el documento

Encabezados

nivel 0–9

Tablas

Table Grid

Salida

Informe + SOW

3

📙 python-pptx — presentaciones (RGBColor, diseños)

La biblioteca de presentaciones. Creas una Presentation(), agrega diapositivas eligiendo un diseño (1 = más alta) y una bandera cuadros de texto con bullets y colores mediante RGBColor. Es lo que genera el deck ejecutivo, el material que cierra la venta en la Ruta 5.

// python-pptx: diapositiva en blanco con título centrado

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor   # NÃO RgbColor
from pptx.enum.text import PP_ALIGN

prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])  # branco

box = slide.shapes.add_textbox(Inches(0.5), Inches(2), Inches(9), Inches(1.5))
p = box.text_frame.paragraphs[0]
p.text = "Estratégia de IA"
p.font.size = Pt(44)
p.font.bold = True
p.font.color.rgb = RGBColor(31, 78, 121)  # azul escuro
p.alignment = PP_ALIGN.CENTER

prs.save('deck.pptx')

El diseño 6 (Blank) es el más usado porque te da control total: posicionas cada caja en pulgadas. El primer párrafo ya existe en paragraphs[0]; para los siguientes bullets usa add_paragraph().

💡 La trampa que bloquea a todos

É RGBColor (RGB en mayúsculas), no RgbColor. Si escribes mal las mayúsculas y minúsculas, se genera un ImportError que parece misterioso. El color se expresa con números enteros RGB: RGBColor(31, 78, 121) = azul oscuro profesional.

Presentation()

crea el deck

Diseño 6

blanco, flexible

RGBColor

no RgbColor

Salida

deck ejecutivo

4

📊 openpyxl — Excel con convención de colores

La biblioteca de hojas de cálculo, donde está la calculadora de ROI. Tres reglas de oro: indexación 1-based (A1 = fila 1, columna 1), fórmulas en vez de valores fijos, y la convención de colores financiera. Quien entrega Excel sin fórmulas entrega una captura, no un modelo.

// openpyxl: fórmula + colores de entrada/fórmula

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill

wb = Workbook(); ws = wb.active
ws.title = "ROI"

ws['A1'] = 'Premissa'           # 1-based: A1
ws['B5'] = '=SUM(B1:B4)'        # fórmula, nunca valor fixo

input_font   = Font(color='0000FF')  # azul = input do usuário
formula_font = Font(color='000000')  # preto = fórmula
ws['B1'].font = input_font
ws['B5'].font = formula_font

wb.save('roi.xlsx')

La convención de colores que aparece abajo es el estándar de modelado financiero: cualquier analista que abra la hoja de cálculo entiende enseguida qué es un dato de entrada, qué es un cálculo y qué viene de afuera. Aplícala siempre en la calculadora de ROI:

🎨 Convención de colores (obligatoria)

  • Azul 0000FF — entradas del usuario (supuestos ajustables)
  • Negro 000000 — fórmulas y cálculos
  • Verde 008000 — enlaces entre pestañas (otras worksheets)
  • Rojo FF0000 — referencias a archivos externos
  • Amarillo (fondo) FFFF00 — premisas clave destacadas

💡 Consejo práctico

Nunca calcules en Python y pegues el número. Coloca las premisas en celdas propias (azul) y haz referencia a ellas con fórmulas (negro). Así, el cliente cambia una premisa y toda la hoja de cálculo se recalcula: eso es lo que distingue un modelo de un informe muerto.

Workbook()

crea la hoja de cálculo

1-based

A1 = (1,1)

Fórmulas

nunca un valor fijo

Colores

calculadora de ROI

5

📕 reportlab — PDF (Platypus)

La biblioteca de archivos PDF. El método recomendado es Platypus: tú montas una story (lista de elementos — párrafos, espaciadores, tablas) y llama doc.build(story) al final. El PDF solo existe después del build.

// reportlab: arma la story y la construye al final

from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.units import inch

doc = SimpleDocTemplate('saida.pdf', pagesize=letter)
styles = getSampleStyleSheet()
story = []
story.append(Paragraph('Estratégia de IA', styles['Heading1']))
story.append(Spacer(1, 0.5 * inch))
story.append(Paragraph('Corpo do documento.', styles['Normal']))
doc.build(story)   # constrói no fim

💡 Consejo práctico

O build viene en el FIN. Todo lo que quieras incluir en el PDF debe estar en la story antes de llamar doc.build(). ¿Olvidaste agregar algo con append? No aparece en el archivo.

Fíjate en que el patrón es siempre el mismo en las cuatro libs — y se puede dibujar el flujo de la skill gerar-entregavel como cuatro pasos lineales:

1

Markdown de entrada

La skill recibe el entregable en Markdown y el formato de destino deseado.

2

Elegir el formato

docx / pptx / xlsx / pdf → selecciona la biblioteca adecuada.

3

Preparar los elementos

Encabezados, tablas, fórmulas, colores: según la convención de cada formato.

4

Guardar el archivo

.save() en las tres; .build(story) en el PDF. Va a la carpeta del cliente.

Platypus

historia de elementos

append

apílalo en la story

build()

al final, siempre

Salida

PDF del cliente

6

📦 Empaquetar como skill gerar-entregavel

No quieres recordar cuatro APIs cada vez. Envuelve las cuatro bibliotecas en una sola skill: "dado un Markdown, genera el .docx/.pptx/.xlsx/.pdf". La skill aporta el conocimiento; tú solo indicas el formato. Es el motor de salida de la Fábrica.

// SKILL.md — gerar-entregavel

---
name: gerar-entregavel
description: Use para transformar um entregável em Markdown
  num arquivo final — .docx, .pptx, .xlsx ou .pdf — usando
  python-docx, python-pptx, openpyxl ou reportlab.
---

# Gerar Entregável

## Passos
1. Ler o Markdown e o formato-alvo.
2. Escolher a biblioteca (docx / pptx / xlsx / pdf).
3. Montar o documento (headings, tabelas, cores).
4. Salvar na pasta de saída do cliente.

A description bien escrita es lo que hace que Claude Code activar la skill en el momento adecuado. Los pasos son el guion que sigue. De aquí en adelante, "convierte este diagnóstico en PowerPoint" es un comando — no un proyecto.

✓ Buena skill de docs

  • ✓Elige el formato adecuado para el entregable
  • ✓Usa fórmulas en Excel, con convención de colores
  • ✓Importa RGBColor correcto en el pptx

✗ Errores comunes

  • ✗Entrega Markdown sin procesar, sin generar archivos
  • ✗Valores fijos en Excel en lugar de fórmulas
  • ✗Escribe RgbColor y rompe la importación
1 skill

4 bibliotecas

description

se activa al instante

Pasos

guion fijo

Reutilización

motor de salida

✅ Resumen del módulo

✓
Los documentos salen de Python — con formato y repetibles, no Markdown sin procesar.
✓
Cada biblioteca cubre un formato — docx (Word), pptx (deck), xlsx (Excel), pdf (reportlab).
✓
Excel usa fórmulas + convención de colores — azul para entradas, negro para fórmulas y el resto de la paleta.
✓
Todo envuelto en generar-entregavel — una skill, cualquier formato de salida.

🎯 Misión 3.3 — Markdown se convierte en paquete

Transforma un único Markdown en dos archivos para el cliente:

  1. Obtener 1 entregable en Markdown (p. ej., un minidiagnóstico de la 3.2).
  2. Generar 1 .docx con python-docx.
  3. Generar 1 .pptx con python-pptx (cuidado: RGBColor).
  4. Envolver en la skill gerar-entregavel.

Éxito: 1 .docx + 1 .pptx generados a partir del mismo Markdown. Lo que obtuviste: el motor de salida de la Fábrica: cualquier prompt se convierte en un archivo para el cliente.

Siguiente módulo:

3.4 — Construye tu subagente (investigador y redactor)