Automatización · Python · Power Automate
Automatización de Reportes en Excel con Python y Power Automate
📅 Junio 2026⏱ 9 min✍ Datos Estáticos
En la mayoría de empresas colombianas, hay una persona — o un equipo entero — dedicando varias horas a la semana a copiar datos entre sistemas, consolidar archivos Excel y enviar reportes por correo. Es trabajo manual, repetitivo y propenso a errores. Python y Power Automate eliminan ese trabajo completamente. Esta guía explica cómo, con ejemplos concretos.
📊 Benchmark real: En proyectos de automatización de reportes que hemos implementado, el tiempo promedio de generación pasa de 3–6 horas semanales a menos de 5 minutos automáticos. El ROI es positivo en menos de 30 días.
¿Python, Power Automate o ambos?
Son herramientas complementarias, no competidoras:
| Herramienta | Ideal para | No ideal para |
| Python | Transformar y analizar datos, generar archivos Excel formateados, conectarse a bases de datos | Interactuar con aplicaciones Windows sin API, enviar correos sin infraestructura |
| Power Automate | Orquestar flujos, enviar correos automáticos, mover archivos en SharePoint/OneDrive, disparar eventos | Análisis de datos complejos, transformaciones avanzadas |
| Combinados | Generación + distribución automática completa de reportes. El patrón más potente. | — |
Parte 1: Generar el reporte Excel con Python
La librería openpyxl permite crear archivos Excel con formato profesional directamente desde Python: colores, fuentes, bordes, gráficos, fórmulas y tablas dinámicas.
# pip install openpyxl pandas sqlalchemy
import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.utils.dataframe import dataframe_to_rows
from sqlalchemy import create_engine
import datetime
# 1. Extraer datos desde la base de datos
engine = create_engine("postgresql://user:pass@servidor/bd")
df = pd.read_sql("""
SELECT region, producto, SUM(ventas) as total_ventas
FROM ventas
WHERE fecha >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY region, producto
ORDER BY total_ventas DESC
""", engine)
# 2. Crear el libro Excel
wb = Workbook()
ws = wb.active
ws.title = "Ventas del Mes"
# 3. Escribir encabezado formateado
header_fill = PatternFill("solid", fgColor="2D3748")
header_font = Font(bold=True, color="FFFFFF", size=11)
for col_num, col_name in enumerate(df.columns, 1):
cell = ws.cell(row=1, column=col_num, value=col_name.upper())
cell.fill = header_fill
cell.font = header_font
cell.alignment = Alignment(horizontal="center")
# 4. Escribir datos
for row in dataframe_to_rows(df, index=False, header=False):
ws.append(row)
# 5. Guardar con nombre dinámico
fecha = datetime.date.today().strftime("%Y-%m-%d")
nombre = f"Reporte_Ventas_{fecha}.xlsx"
wb.save(nombre)
print(f"Reporte generado: {nombre}")
Parte 2: Enviar el reporte automáticamente con Power Automate
Una vez que Python genera el archivo, Power Automate puede detectarlo y distribuirlo automáticamente. El flujo más común:
- Trigger: "Cuando se crea un archivo en una carpeta de OneDrive/SharePoint" (Python guarda el Excel allí).
- Obtener contenido del archivo: Leer el Excel recién generado.
- Enviar correo: Outlook/Gmail con el archivo adjunto a los destinatarios definidos.
- Notificación en Teams: Publicar un mensaje en el canal de análisis con el resumen.
- Archivar: Mover el archivo a la carpeta de histórico.
Flujo alternativo: programar con Task Scheduler + correo Python
Si no tienes Microsoft 365, Python puede enviar el correo directamente:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders
def enviar_reporte(archivo, destinatarios):
msg = MIMEMultipart()
msg["From"] = "reportes@miempresa.com"
msg["To"] = ", ".join(destinatarios)
msg["Subject"] = f"Reporte de Ventas — {datetime.date.today()}"
msg.attach(MIMEText("Adjunto el reporte de ventas del mes. Saludos.", "plain"))
with open(archivo, "rb") as f:
part = MIMEBase("application", "octet-stream")
part.set_payload(f.read())
encoders.encode_base64(part)
part.add_header("Content-Disposition", f"attachment; filename={archivo}")
msg.attach(part)
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as servidor:
servidor.login("reportes@miempresa.com", "app_password")
servidor.sendmail(msg["From"], destinatarios, msg.as_string())
enviar_reporte(nombre, ["gerencia@miempresa.com", "ventas@miempresa.com"])
Programar la ejecución automática
Opción A: Task Scheduler de Windows
Para ejecutar el script Python todos los lunes a las 7am sin intervención humana:
- Abrir Task Scheduler (Programador de tareas).
- Crear tarea básica → Nombre: "Reporte Ventas Semanal".
- Trigger: Semanal, lunes, 07:00.
- Acción: Iniciar un programa →
python.exe con argumento C:\reportes\generar_reporte.py.
Opción B: Power Automate con trigger de recurrencia
En Power Automate Desktop se puede crear un flujo que ejecute el script Python directamente:
- Trigger de recurrencia (cada lunes 7am).
- Acción "Ejecutar script de Python" o "Ejecutar aplicación de escritorio".
- Continuación del flujo para enviar correo y notificar en Teams.
Casos reales en empresas colombianas
Caso 1 — Empresa de distribución (Bogotá)
Consolidaba ventas de 12 regiones manualmente cada lunes. El proceso tomaba 4 horas. Con Python + Task Scheduler, el reporte consolidado llega al correo de gerencia los lunes a las 7:05am. Tiempo actual: 0 minutos de trabajo manual.
Caso 2 — IPS de salud (Medellín)
El área financiera generaba 8 reportes distintos el último día del mes (facturación, cartera, glosas, etc.). Con Power Automate + Python, los 8 reportes se generan y envían automáticamente a los directores correspondientes el último día hábil del mes.
Caso 3 — Empresa de logística (Cali)
Necesitaban reportar KPIs operativos diarios a tres clientes corporativos con formatos distintos. Python genera tres archivos Excel con el formato de cada cliente, Power Automate los envía por correo con asunto y cuerpo personalizados. Proceso anterior: 1.5 horas diarias.
¿Tu equipo pierde horas en reportes que podrían ser automáticos?
Identificamos los reportes con mayor potencial de automatización y te entregamos la solución funcionando.
Diagnóstico gratuito →
Conclusión
La combinación Python + Power Automate es hoy el estándar para automatizar reportes en empresas que usan el ecosistema Microsoft. Python se encarga de la lógica de datos y la generación del archivo; Power Automate gestiona la distribución y los flujos. El resultado es un proceso que corre solo, sin errores y con la puntualidad de una máquina. Si tu empresa todavía genera reportes manualmente en Excel, estás a un proyecto de semanas de eliminar ese trabajo para siempre.