python-2.7 - instalar - read word file in python
Abrir un documento de Word que tiene una contraseƱa usando la biblioteca docx (2)
Estoy tratando de abrir un documento de Word que tiene una contraseña.
Estoy usando el paquete docx, un poco viejo
from docx import opendocx, getdocumenttext
y más adelante
document = opendocx(filename)
Me preguntaba si había opciones en el opendocx que le permitieran abrir documentos Word protegidos con contraseña: sí sé la contraseña. Revisé el repositorio de github aquí: https://github.com/mikemaccana/python-docx pero no vi una opción. Estoy tratando de evitar reescribir el código para usar un paquete más nuevo, pero eso puede ser inevitable.
Si el .docx tiene solo protección contra escritura, habría pensado que el paquete docx debería funcionar como está, ya que probablemente ignore el bit relevante de XML. Para la protección de lectura, el formato MS-OFFCRYPTO se describe en detalle en el sitio web de Microsoft en https://msdn.microsoft.com/en-us/library/office/cc313071%28v=office.12%29.aspx?f= 255 y MSPPError = -2147217396 . Este documento tiene pseudocódigo. Hay una implementación de C # en https://www.lyquidity.com/devblog/?p=35 . En teoría, sería posible implementar todo esto en python, pero va a requerir mucho trabajo adicional además de lo que hace el paquete actual, que se centra en XML y procesamiento de texto.
Creo que la única opción en este momento sería descifrar el documento utilizando MS Word o LibreOffice y luego usar un medio alternativo para mantener el archivo cifrado en un formato accesible para python.
python-docx no admite contraseñas en este momento. Tampoco lo encontré en el código, pero para estar seguro, pregunté en la lista de correo de python-docx y recibí la siguiente respuesta :
Lo siento, no. Al menos no hay una función incorporada para eso. No estoy seguro de cómo todo eso funciona con Word, podría valer la pena investigar un poco.
Si utiliza la protección con contraseña del archivo Zip, puede abrir el archivo .docx (que es un Zip en el nivel superior) y luego hacer algo que seguramente le proporcionaré. En el peor de los casos, podría guardarlo como otro archivo zip sin una contraseña y usar eso. Y, por supuesto, el código postal provisional podría ser un archivo en memoria de StringIO.
Si usan su propio cifrado, espero que sea bastante más difícil :)
Docx usa su propio cifrado, no cifrado zip. De esta manera, solo los contenidos internos deben ser encriptados. Parte de la información sobre descifrado de archivos docx está disponible aquí:
Un enfoque que puede usar si no quiere cambiar su código es bifurcar el paquete docx y agregar código para descifrar el archivo docx. Si tenía otro programa para descifrar el documento, también podría pagar para descifrarlo.