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)
Cualquier país desarrollado tiene sus propios indicadores folclóricos. España, por motivos que tienen mucho que…
Entras a la web de tu banco. En la página principal, un banner llamativo: “Depósito…
Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.3, disponible…
Cerramos la serie internacional con la categoría más estrambótica de todas: indicadores que predicen el…
Si el WOE y el IV son la base matemática del credit scoring, el binning…
Seguimos iterando sobre el laboratorio de Analytics Lane y lanzamos la versión 1.2, disponible en:https://www.analyticslane.com/lab/es…
This website uses cookies.