Por qué Excel falla con un millón de filas (y qué hacer al respecto)
Excel tiene un límite duro de 1.048.576 filas por hoja — 220, que es lo que cabe en un índice de fila de 20 bits. Si abres un CSV con más filas, Excel trunca el archivo silenciosamente y muestra un aviso que la mayoría no ve. Si el archivo tiene menos filas pero más de unos cientos de miles, Excel lo abre — y luego te hace esperar cada vez que tocas una celda.
El límite duro es la parte famosa. La lentitud es la parte que de verdad arruina el flujo. Vamos a ver las dos.
El límite duro: 1.048.576 filas
Todos los formatos modernos de Excel (XLSX, XLSM, XLSB) heredan el mismo límite de cuadrícula: 1.048.576 filas × 16.384 columnas por hoja. Ese número es 220, elegido porque Excel indexa internamente las filas con un entero de 20 bits. El límite aplica por hoja, no por libro — así que técnicamente puedes tener muchas hojas de un millón de filas en un mismo archivo, pero ninguna hoja puede crecer más allá del límite.
¿Qué pasa cuando abres un CSV con más filas? Excel muestra un diálogo ('No se cargó el archivo completo') e importa las primeras 1.048.576 filas, descartando el resto. Las filas que faltan han desaparecido de la hoja pero siguen en disco en el CSV original — y este es el momento en que la mayoría guarda el libro truncado encima del original y pierde datos.
El límite blando: duele mucho antes del millón
Mucho antes del límite de filas, Excel se vuelve doloroso. El motor de cálculo recomputa el grafo de dependencias en cada edición; las funciones volátiles (HOY, AHORA, DESREF, INDIRECTO, ALEATORIO) disparan un recálculo completo; el formato condicional se evalúa celda a celda; y el archivo se reescribe en disco con cada guardado. Con 200k filas y unas pocas columnas con fórmulas, cada click se atasca un segundo. Con 500k filas se atasca varios segundos. Con 900k filas se oye el ventilador claramente.
XLSX es además un formato XML comprimido. Abrir el archivo significa descomprimir el ZIP entero en memoria, parsear el XML hasta una cuadrícula e indexar cada celda. Un XLSX de 200 MB puede tranquilamente usar 1,5–2 GB de RAM tras el parseo. En un portátil con 8 GB es el momento en que el SO empieza a tirar de swap y Excel parece congelado aunque siga trabajando.
Por qué CSV es más rápido para datos grandes
Un CSV es texto plano. Lo puedes leer línea a línea sin tener el archivo entero en memoria, que es exactamente lo que hace cada herramienta ETL, cargador de base de datos y utilidad de división. El mismo archivo abierto en Excel tiene que parsearse íntegramente a una cuadrícula de celdas antes de poder hacer nada; abierto como CSV por una herramienta streaming se puede procesar en memoria constante.
En la práctica, eso significa: si tus datos pasan de 100k filas, no trabajes con ellos como XLSX. Exporta a CSV y usa herramientas pensadas para streaming — una carga en base de datos, un script de Python con csv.reader, un divisor por línea de comandos, o una herramienta en navegador que use un Web Worker. La idea es evitar cargar el archivo en una cuadrícula que no necesitas.
El flujo práctico cuando tu archivo es demasiado grande
Cuando un CSV o XLSX pasa de lo que Excel puede manejar cómodamente, lo correcto es casi siempre dividirlo en partes más pequeñas listas para importar. Cada parte es suficientemente pequeña para abrirse en Excel si necesitas inspeccionarla, suficientemente pequeña para importarse en el sistema downstream que estés alimentando, y los datos totales se preservan exactamente. No pierdes nada al dividir — sólo dejas de pelearte con el límite de filas.
Ese es el flujo para el que está hecho MessyMatch. El divisor de CSV hace streaming del archivo línea a línea y escribe partes del número de filas o tamaño en bytes que especifiques. El divisor de Excel hace lo mismo para XLSX con la salvedad de que parsear XLSX es más pesado — para libros muy grandes, exportar a CSV primero y dividir eso es más rápido y usa menos RAM.
Checklist corto
- Más de 100k filas en XLSX: exporta a CSV antes de hacer nada pesado.
- Más de 500k filas en CSV: ni intentes abrirlo en Excel. Usa una herramienta CSV-aware.
- Necesitas importar en un sistema con límite de filas (HubSpot, Salesforce, Mailchimp): divide en partes del tamaño del límite, cabeceras en cada parte.
- Necesitas enviar el archivo: la mayoría de proveedores limita adjuntos a 25 MB. Divide por tamaño en bytes, no por número de filas, para ese caso.
- Necesitas comparar dos archivos grandes: no uses BUSCARV. Haz diff con una herramienta que haga streaming. Mira el siguiente post sobre BUSCARV vs BUSCARX vs comparar archivos.