Script que convierte un archivo CSV de ventas en un reporte de Excel listo para presentar, con totales, resúmenes y gráfica. Sustituye el trabajo manual de copiar, pegar y sumar en hojas de cálculo.
Proyecto de práctica personal. Los datos de
datos/ventas_ejemplo.csvson ficticios y solo sirven para probar el script.
Lee un CSV con estas columnas:
| fecha | producto | categoria | cantidad | precio_unitario |
|---|---|---|---|---|
| 2026-07-01 | Cuaderno profesional | Papeleria | 12 | 45.00 |
Y genera un .xlsx con tres hojas:
| Hoja | Contenido |
|---|---|
| Ventas | Datos originales, importe por venta (fórmula =D*E), filtros y total general |
| Por producto | Unidades e importe por producto, ordenado de mayor a menor, con gráfica de barras |
| Por mes | Unidades e importe por mes |
Además:
- Valida los datos: si una fila tiene un número mal escrito, indica la línea exacta del error.
- Usa fórmulas de Excel (
SUM, multiplicaciones), así el cliente puede editar datos y los totales se recalculan. - Aplica formato de moneda, encabezados con color, columnas ajustadas y fila superior fija.
- Python 3.10+
- openpyxl para crear el archivo de Excel
csv,argparse,datetime(biblioteca estándar)- Pruebas con
unittest
# 1. Clona el repositorio
git clone https://github.com/arumando/python-reporte-excel.git
cd python-reporte-excel
# 2. (Opcional) Crea un entorno virtual
python -m venv venv
venv\Scripts\activate # Windows
source venv/bin/activate # Linux / macOS
# 3. Instala la dependencia
pip install -r requirements.txt
# 4. Genera el reporte con los datos de ejemplo
python generar_reporte.py datos/ventas_ejemplo.csv -o reporte_ventas.xlsxSalida esperada:
Reporte creado: reporte_ventas.xlsx
Ventas procesadas: 30
Importe total: $24,699.50
Ejecutar las pruebas:
python -m unittest -v[PENDIENTE: captura de la hoja "Ventas"]
[PENDIENTE: captura de la hoja "Por producto" con la gráfica]
- Leer y validar archivos CSV con
csv.DictReader, con mensajes de error útiles para el usuario. - Crear libros de Excel con estilos, formatos de moneda, filtros y gráficas usando
openpyxl. - Agrupar y resumir datos (similar a un
GROUP BYde SQL) con diccionarios de Python. - Separar el código en funciones pequeñas que se pueden probar por separado.
- Leer también archivos
.xlsxde entrada, no solo CSV. - Agregar un resumen por categoría y una gráfica de línea por mes.
- Enviar el reporte por correo de forma automática.
José Armando García Bandera — github.com/arumando