Automatización · Python · Power Automate

Automatización de Reportes en Excel con Python y Power Automate

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:

HerramientaIdeal paraNo ideal para
PythonTransformar y analizar datos, generar archivos Excel formateados, conectarse a bases de datosInteractuar con aplicaciones Windows sin API, enviar correos sin infraestructura
Power AutomateOrquestar flujos, enviar correos automáticos, mover archivos en SharePoint/OneDrive, disparar eventosAnálisis de datos complejos, transformaciones avanzadas
CombinadosGeneració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:

  1. Trigger: "Cuando se crea un archivo en una carpeta de OneDrive/SharePoint" (Python guarda el Excel allí).
  2. Obtener contenido del archivo: Leer el Excel recién generado.
  3. Enviar correo: Outlook/Gmail con el archivo adjunto a los destinatarios definidos.
  4. Notificación en Teams: Publicar un mensaje en el canal de análisis con el resumen.
  5. 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:

  1. Abrir Task Scheduler (Programador de tareas).
  2. Crear tarea básica → Nombre: "Reporte Ventas Semanal".
  3. Trigger: Semanal, lunes, 07:00.
  4. 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:

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.