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.
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).
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.
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.
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)
En casi cualquier análisis estadístico —ya sea en medicina, psicología, economía o ciencia de datos—…
El MSCI World Index suele presentarse como “la ventana al mundo” para quienes invierten en…
En el mundo del análisis de datos solemos escuchar una idea poderosa: cuantos más datos,…
¿Te has encontrado con este error al intentar instalar paquetes con npm? npm ERR! code…
En ciencia de datos y estadística, los promedios y porcentajes son herramientas fundamentales para resumir…
Las bases de datos son el corazón de casi cualquier sistema de información moderno. Ya…
This website uses cookies.