Reducir el tamaño de un archivo Excel

Tamaño. Peso. Volumen. Da igual cómo lo llamemos. Cuando un archivo pesa demasiado, se hace demasiado grande, es un problema. No podemos enviarlo por email, tarda mucho en cargar y en grabarse. Es especialmente molesto cuando realiza las copias de seguridad, pues ocupa varios segundos cuando nuestro cerebro estaba pensando en productividad.

La historia

El otro día mi amigo Quique  me comentó que le había llegado un archivo con un tamaño excesivo. Cuando su creador lo generó en su día, ocupaba menos de 1 Mb, pero ahora ocupaba casi 50 Mb. ¿Qué pasaba? Comentando por teléfono, apuntamos a algunos sospechosos habituales:

  • ¿Hay datos en el modelo de datos?
  • ¿Hay muchas formas (por ejemplo cuadros de texto vacíos) en las hojas?

¿Y esto cómo se hace? Empezamos con pico y pala.

Información sobre el modelo de datos

El modelo de datos es información que puede haber en el archivo, pero que no está en ninguna hoja. Está por detrás, y para ver esa información hay que conectar a través de tablas dinámicas o trabajar directamente en el modelo a través del administrador del modelo de datos.

En ocasiones estos datos pasan desapercibidos, porque el administrador del modelo de datos solo está disponible a partir de la versión 2013 de Excel. Por eso, en versiones anteriores puede no ser fácilmente localizable.

Aunque el modelo de datos es muy eficiente, puede almacenar mucha información, por lo que es posible que ocupe bastante espacio, generando archivos de tamaño muy grande. Para averiguar si hay información en el modelo de datos, se me ocurre que podemos hacer dos cosas:

1. Insertar una tabla dinámica. Al insertarla, se crea una ventana de diálogo que, si existe, permite seleccionar el modelo de datos como fuente de la tabla. Si la opción de modelo de datos no se puede marcar es porque no hay nada.

 

Insertar tabla dinámica
Insertar tabla dinámica

2. Acceder directamente al administrador del modelo de datos. Esto se puede hacer en la versión 2016 a través de la pestaña Datos, en el grupo ‘Herramientas de datos’. En versiones anteriores, a través de la pestaña Power Pivot, que en algunas versiones es un add-in que hay que instalar.

Pestaña Power Pivot
Pestaña Power Pivot
Pestaña Datos
Pestaña Datos

En nuestro caso, el archivo no tenía modelo de datos, así que pasamos al siguiente sospechoso de la lista.

Formas ocultas (o visibles)

En ocasiones me he encontrado con algún archivo que funcionaba muy lentamente, con un tamaño excesivo que ocupaba muchos megas. Tras mucho buscar, he encontrado que en alguna hoja había literalmente miles de cuadros de texto vacíos. Pero eso… ¿cómo se sabe?

Bueno, hay varias maneras. Una es “a ojo”. El icono del ratón habitual sobre una hoja de cálculo es una cruz. Si tenemos un cuadro de texto y ponemos el cursor encima, lo que obtendremos es un icono que se parece a una I mayúscula (como el que tiene Word). Mejor lo vemos en una imagen.

Esto es lo que se ve habitualmente en Excel:

Reducir tamaño 4
Icono habitual en Excel

Esto es lo que se ve si hay “intrusos”:

Reducir tamaño 5
Icono cuando hay un cuadro de texto

De la misma manera, si lo que hay es una forma u otras cosas, el icono será una flecha. Si teniendo el cursor alternativo este hacemos click, entonces se hace visible nuestro amigo:

Reducir tamaño 6
Cuadro de texto visible

Si tenemos una versión de Excel posterior a la 2007 (la tenemos, ¿verdad?), entonces podemos hacer visibles nuestros objetos de otra manera: mediante el panel de selección. Esto se encuentra, en la versión 2016, dentro de “Diseño de página” en la cinta de opciones, en el panel “organizar”. En versiones anteriores tenemos que seleccionar un objeto, y el botón para activar el panel de selección está dentro de la ficha “Herramientas de dibujo” o “Herramientas de gráficos”. El panel aparece a la derecha, y ahí tenemos una lista de todos los objetos que hay en la hoja.

Si hay algo, ahí estará.

Reducir tamaño 7
Panel de selección – Excel 2016
Reducir tamaño 8
Panel de selección en versiones anteriores a la 2016

Como ves, con unos cuantos copia-pega, he generado más de 33.000 copias del mismo cuadro de texto vacío. La generación de cuadros es exponencial, por lo que rápidamente se llega a cantidades desorbitadas si no nos damos cuenta. El problema ahora es borrarlos todos. ¿Tú le darías 33.000 veces a la tecla suprimir? Yo no. Para eso sé VBA. Pondría un código más o menos así:

Sub asdasd()
Dim obj As Object
For Each obj In ActiveSheet.Shapes
  obj.Delete
Next
End Sub

De esta manera elimino todos los shapes (cuadros de texto, pero también imágenes, formas, etc.) que haya en la hoja.

Sin embargo, este tampoco era el problema en el archivo de nuestro amigo. El panel de selección aparecía vacío, así que seguí buscando.

Formatos condicionales, formatos de celda, colores…

La hoja tenía muchos formatos de todo tipo. Condicionales, fondos de celda, tramas, colores de fondo y de texto… Probé a modificar esto, porque algo tenía que ser. Simplemente seleccioné toda la hoja, le puse sin color de fondo, sin líneas, sin tramas, apliqué y guardé… Y el tamaño del archivo era prácticamente el mismo. Eso no era.

Y me pregunté cómo se podía averiguar qué es lo que está ocupando espacio en disco concretamente… Y, por supuesto, había una solución.

Ver las tripas de un archivo .xlsx

Desde que Microsoft adoptó el estándar .xlsx, convirtió los archivos excel en archivos con estructura xml. Eso significa que se puede leer de muchas maneras, y que muchos tipos de programas entenderán la estructura. Curiosamente el importador xml del propio Excel nos da error. ¿Y esto por qué es?

Sencillamente, porque Excel no guarda directamente el archivo en formato xml, sino que, además, lo comprime en formato zip para que ocupe menos espacio. Entonces… ¿Y si probamos a cambiarle la extensión al archivo y lo abrimos con un compresor?

Pasos previos para cambiar la extensión al archivo

Supongo que todos sabemos cambiar la extensión a un archivo, pero de todas maneras vamos a decir cómo se hace. Si ya lo sabes hacer, puedes pasar al siguiente título sin problemas.

Lo primero es abrir una ventana del explorador de Windows. Esto se puede hacer rápidamente pulsando las teclas Windows + E.

Reducir tamaño 9
Combinación para abrir el Explorador de Windows

Se nos abre la ventana del explorador de Windows en ‘Mi equipo’. Ahí seleccionamos el panel “Vista” y a la derecha del todo tenemos el botón Opciones, donde hacemos click en ‘Cambiar opciones de carpeta y búsqueda’.

Reducir tamaño 10
Cambiar opciones de carpeta

Se nos abre una ventana donde seleccionamos la pestaña ‘Ver’ y luego bajamos hasta encontrar ‘Ocultar las extensiones de archivo para tipos de archivo conocidos’. Debemos dejar la casilla desmarcada y darle a Aceptar.

Reducir tamaño 11
Mostrar extensión de los archivos.

Ahora sí, cambiamos la extensión del archivo

Una vez hecho esto, nos vamos a nuestro archivo .xlsx y le cambiamos el nombre. Sustituimos .xlsx por .zip y aceptamos todos los mensajes de Windows.

Reducir tamaño 12
Cambiar extensión de archivo.

Como ves, yo primero me hice una copia para mantener el .xlsx original (bueno, en nuestro caso era un .xlsm porque tenía macros). Y ya podemos abrir el nuevo archivo .zip en un compresor cualquiera. En mi caso tengo instalado WinRar, pero vale cualquiera que abra .zip, incluso el propio explorador de Windows.

Al abrirlo, verás una estructura de carpetas y de archivos. Resulta que nuestro archivo .xlsx es, en realidad, un montón de archivos XML y carpetas comprimidos. Podemos navegar por las carpetas para ver qué es lo que está ocupando espacio… En nuestro caso particular entré en la carpeta ‘xl’, y dentro en la carpeta ‘worksheets’. Ordenando por tamaño, ya sabemos qué hoja es la culpable:

Reducir tamaño 13
Vista del archivo Excel a través de WinRar.

¡Y ahí los tenemos! Nuestros culpables son las hojas 5 y 4 de nuestro archivo.

Entendiendo a qué hoja se refiere…

Lo que pasa es que en nuestro archivo, las hojas no se llaman ‘sheet5’ ni ‘sheet4’. Tienen nombres como ‘Portada’, ‘Índice’, ‘Datos básicos’…

La primera aproximación es acudir a nuestro editor de VBA, porque sabemos que en el panel de Proyecto ponen nuestros nombres entre paréntesis, pero por fuera las siguen llamando ‘Hoja 1’, ‘Hoja 2’, etc.

Reducir tamaño 14
Estructura del archivo .xlsx vista en el panel de Proyecto del VBE.

Hay un poquito de censura, porque el archivo no es mío y no tengo permiso explícito para utilizarlo. Solo he mantenido los nombres genéricos porque así se entiende bastante bien. Los nombres entre paréntesis son los que vemos en las pestañas de nuestras hojas. Y ‘Hoja 1’, ‘Hoja 2’, etc. es el nombre interno de las hojas. En realidad, es una propiedad que se llama “codename”, y que nos permite cierta facilidad para trabajar con las hojas. Pero este no es el nombre con el que se corresponde nuestra nomenclatura dentro del archivo zip. Voy a intentar aclararlo un poco.

En código nos podemos referir a una hoja de tres maneras: mediante su nombre, mediante su codename y mediante su index. Lo haríamos así:

nombre:
Worksheets("Listas").Activate

index:
Worksheets(1).Activate

codename:
hoja1.Activate

En este caso, el index es 1, y el codename es Hoja1. Pero no tienen por qué coincidir. De hecho, en mi archivo la hoja que se llama ‘Portada’ tiene el index 2 y el codename ‘Hoja5’.

Pues el número que hay detrás de ‘sheet’ en los nombres de archivo de nuestro zip son el index de cada hoja.

Resolviendo el caso: reducir el tamaño del archivo

Finalmente, al saber ya en qué hoja teníamos que actuar, y tras haber descartado el resto de sospechosos, simplemente me fui a la última fila con datos, seleccioné la fila siguiente entera y presioné Ctrl+Mayús+↓ para seleccionar todas las celdas hasta el final del archivo. Luego botón derecho y eliminar. De la misma manera, me fui a la última columna con datos, e hice lo mismo seleccionando la columna siguiente, y luego Ctrl+Mayús+→ para seleccionar todas las columnas hasta el final. Otra vez, botón derecho y eliminar.

Reducir tamaño 15
Eliminar celdas.

Simplemente hice esto en ambas hojas que parecían tener problemas de tamaño en nuestro archivo zip. Y las hojas las seleccioné utilizando VBA con la orden que usaba el index del apartado anterior. Tras guardar, la magia se hizo.

Reducir tamaño 16
Ya pesa menos…

¿Qué había ocurrido?

Como he comentado anteriormente, las hojas tenían muchos formatos aplicados. Sombreados, rayados, colores…

Parece ser que cuando una celda está vacía y no tiene formato, Excel la ignora. No guarda nada de información sobre ella porque está vacía y tiene las propiedades estándar. Pero cuando le cambiamos el formato, entonces Excel tiene que guardar esa información en el archivo. Si volvemos a eliminar el formato, para Excel ya es una celda modificada y la sigue guardando, a menos que la eliminemos completamente.

Al preparar la hoja, quien la hizo probablemente seleccionó columnas y filas completas para aplicar formatos. Quizás simplemente extendió con doble click hasta el final de la hoja sin percatarse de que no le hacía falta tanta información guardada en el archivo. Al repetir esto con cientos de columnas, el peso del archivo se multiplicó.

Así que, si has llegado hasta aquí, solo me queda decirte que no colorees de más las hojas Excel si no quieres encontrarte con 40 megas de archivo sin saber por qué.

Un saludo

(Visited 98.370 times, 1 visits today)

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información ACEPTAR

Aviso de cookies