
En muchos entornos la utilización de archivos Excel para el envío de datos es un estándar, a pesar de sus grandes desventajas. Además, es habitual que protejamos los mismo con una contraseña para evitar que sean modificados por otros usuarios. Obligándonos a introducir la contraseña para eliminar la protección en archivos Excel y poder realizar cualquier cambio. Debido a la cantidad de archivos de este tipo que manejamos es habitual olvidar la contraseña de algunos, de modo que nos quedamos con un archivo que no podemos modificar.
Eliminar la protección de un archivo Excel es una tarea relativamente sencilla que se puede realizar manualmente o automatizar. En esta entrada explicaré como eliminar la protección manilamente y al final dejaré un script de Python que permite automatizar la tarea.

En el caso de que nos olvidemos de la contraseña del Excel no suele se complicado recupérala, ya que estas suelen ser débiles. Pero, cuando no es así, eliminar la protección de estos archivos es relativamente simple. Para hacer esta tarea primero se ha de conocer el formato de los archivos Excel.
Formato de los archivos Excel
Los archivos con formato xlsx que empela actualmente Excel no son más que una carpeta comprimida en la que se pueden encontrar archivos XML. Esto se puede comprobar simplemente cambiando la extensión del archivo a zip y utilizando un descompresor de estándar. Un ejemplo de lo que se obtiene de puede observar en la siguiente captura de pantalla.

Cada una de las hojas del libro es básicamente un archivo XML que se encuentra en dentro de la ruta xl/worksheets
. En el ejemplo anterior se pueden observar la existencia de dos hojas: sheet1.xml
y sheet2.xml
. El contenido de una de ellas se puede ver en la siguiente captura.

Hacia el final del archivo se puede encontrar una propiedad sheetProtection
en la que se almacena el hash de contraseña (afortunadamente no es la contraseña en texto plano).

Eliminación de la contraseña del Excel
Ahora, para desproteger las hojas del libro simplemente se ha de eliminar la propiedad sheetProtection
y volver a comprimir la carpeta en un archivo xlsx. El nuevo archivo obtenido de esta forma se puede abrir con Excel y modificar los valores de este. Como se muestra en la siguiente captura, ya no aparece el candado en la pestaña de la hoja indicando que esta esta protegida.

Automatización del proceso en Python
El proceso descrito anteriormente para la desprotección de archivos Excel es sencillo pero tedioso. Para facilitar la tare se puede escribir un pequeño script en Phyton que automatiza la tarea.
import shutil import os import re import zipfile def unprotect_xlsx(excel_file, surname='_unprotect', temporal_folder='.temp_folder'): zip_ref = zipfile.ZipFile(excel_file, 'r') zip_ref.extractall(temporal_folder) zip_ref.close() sheet_folder = os.path.join(temporal_folder, 'xl/worksheets') sheet_list = os.listdir(sheet_folder) for sheet in sheet_list: filename = os.path.join(sheet_folder, sheet) if os.path.isfile(filename): file = open(filename, 'r') data = file.read() file.close() data = re.sub(r"<sheetProtection.*?/>", "", data) file = open(filename, 'w') file.write(data) file.close() out_file = excel_file.replace('.xlsx', surname + '.xlsx') shutil.make_archive(out_file, 'zip', temporal_folder) shutil.move(out_file + '.zip', out_file) shutil.rmtree(temporal_folder)
En la función unprotect_xlsx
lo primero que se hace es descomprimir el archivo Excel en una carpeta temporal. En el interior de esta carpeta se buscan todos los archivos XLM que se encuentran dentro de la ruta xl/worksheets
. Posteriormente se itera sobre estos archivos eliminado la propiedad sheetProtection
cuando esta existe y volviendo a guardar el archivo. Finalmente, se comprime la carpeta con en un archivo zip al que se le cambia la extensión a xlsx.
Conclusiones
En muchas ocasiones protegemos archivos Excel con una contraseña para evitar que otros usuarios los modifiquen. En el caso de olvidar esta contraseña eliminar la protección no es demasiado complicado.
Imágenes: Pixabay (TheDigitalArtist)
Gracias !! Este es un buen método. Recomiendo usar un programa de recuperación de contraseña además de este método. Este software puede encontrar la contraseña para el archivo cifrado de Excel. Pasprog Excel Password Forgotten https://es.pasprog.com/excel-password-forgotten.php
Es una aplicación que hace un ataque por fuerza bruta, por lo que, si la contraseña es larga, como debería ser, cuesta bastante tiempo recuperarla. En el caso de que nos olvidemos de una contraseña generalmente es más sencillo eliminar la contraseña que buscarla.
Realmente no deberíamos usar ninguno de estos métodos si guardamos las contraseñas en un gestor de contraseñas. Además, así se pueden usar una diferente en c cada uno de los libros.
Hola! gracias por compartir este código, tengo una inquietud en alguna linea debo modificar el nombre del archivo que quiero desproteger, ya que al ejecutarlo no me hace nada por así decirlo. gracias
El código es una función que hay que llamar con la ruta al archivo como primer parámetro, solamente hay que hacer eso para usarla.