使用docx库打开有密码保护的Word文档

4

我正在尝试打开一个有密码的Word文档。

我正在使用docx包 - 它有点老。

from docx import opendocx, getdocumenttext

并且更进一步
 document = opendocx(filename)

我想知道opendocx是否有选项可以打开受密码保护的word文档,我知道密码。我在这里检查了github仓库:https://github.com/mikemaccana/python-docx,但没有看到选项。我试图避免重写代码以使用更新的软件包,但这可能是不可避免的。

1
文档是否受到阅读保护(即没有密码无法查看)或写入保护(在Word中打开文档后有限制)? - Nick Kennedy
它受到了读取保护。我使用VB脚本打开每个文档并在不需要密码的情况下进行保留。由于需要将doc转换为docx文件,因此VB脚本已经成为过程的一部分。 - Reeza
3个回答

6

python-docx目前不支持密码。在代码中我也没有找到相关信息,但为了确认,我在python-docx邮件列表上提问并收到以下回复:

抱歉,没有这个功能。至少没有内置的功能。我不确定Word如何处理它,这可能需要一些研究。

如果它使用Zip存档的密码保护,您可以打开.docx文件(在顶层是Zip),然后做一些操作来实现它。最坏的情况下,您可以将其另存为没有密码的另一个zip文件,并使用该文件。当然,临时zip文件可以是StringIO内存文件。

如果他们使用自己的加密方式,我认为会更加困难 :)

Docx使用自己的加密方式,而不是Zip加密。这样只需加密内部内容即可。有关解密docx文件的一些信息在此处提供:

如果您不想更改代码,可以使用一种方法是fork docx软件包并添加解密docx文件的代码。如果您有另一个程序来解密文档,您也可以使用shell进行解密。


3
pywin32中的API可以打开受密码保护的.doc或.docx文件。函数win32com.client.Dispatch可以通过调用WORD应用程序来打开.doc文件,并返回一个包含文件信息的对象。然后,您可以使用对象的open方法加载数据,可以将密码传递给第5个参数。以下是我的代码: word = win32com.client.Dispatch('Word.Application') word.Visible = False word.DisplayAlerts = False doc = word.Documents.Open(document_path, False, True, None, psw) 其中psw参数是密码。
这种方法似乎不支持多线程程序。我在创建新线程时遇到了错误。
模块docx似乎不支持加密文件。

0
如果.docx文件只有写保护,我认为docx包应该可以正常工作,因为它可能会忽略XML的相关部分。对于只读保护,MS-OFFCRYPTO格式在Microsoft网站上有详细描述,链接为https://msdn.microsoft.com/en-us/library/office/cc313071%28v=office.12%29.aspx?f=255&MSPPError=-2147217396。该文档有伪代码,C#实现在https://www.lyquidity.com/devblog/?p=35。理论上可以在Python中实现所有这些,但这将是当前包专注于XML和文本处理之外的大量额外工作。
我认为目前唯一的选择是使用MS Word或LibreOffice解密文档,然后使用替代手段将文件加密为Python可访问的格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接