解密Excel文件

3 投票
3 回答
9680 浏览
提问于 2025-04-15 20:28

你好,我有1000个加密的工作簿,我想通过提供一个密码来解密它们。
我在apache poi或者python的xlrd模块里找不到解密的方法。

有没有人知道哪个库可以处理这个(wbc.decrypt(pwd))?我希望能找到一个可以在unix系统上使用的库。

谢谢!

3 个回答

0

由于这个问题和它的接受答案已经有点老了,我想分享一下我现在用来解密密码保护文件的方法,特别是给那些从谷歌等地方过来的人。

msoffcrypto (PyPI链接) 是一个更现代的工具,它不依赖于win32 API,因此可以在不同的平台上使用。

这个示例函数应该能返回一个解密后的办公文件,作为一个 BytesIO 对象,你可以像处理普通文件一样使用它。(比如,可以用 pd.read-excel(decrypted_workbook) 加载到Pandas中,或者保存到磁盘等。)

def decrypt_office_file(filename: Path, password: str = None) -> io.BytesIO:
    decrypted_workbook = io.BytesIO()
    with open(filename, 'rb') as file:
        office_file = msoffcrypto.OfficeFile(file)
        office_file.load_key(password=password)
        office_file.decrypt(decrypted_file)  # puts result into decrypted_workbook
    return decrypted_workbook

你还可以在这个基础上扩展,检查某个文件是否真的被加密,方法是:

if office_file.is_encrypted():
    ...

现在的Office支持多种加密方式,包括密钥文件(.pem)等,而这个库在写这段话的时候可以处理大部分的加密方式。

1

Apache POI 是一个可以帮你读取加密的Excel文件的工具,并且可以把它们解密后写出来。想要开始使用,可以查看一下加密页面。

6

使用COM绑定来调用Unprotect方法。

import win32com.client

excel = win32com.client.Dispatch('Excel.Application')

workbook = excel.Workbooks.open(r'c:\mybook.xls', 'password')

workbook.SaveAs('unencrypted.xls')

使用SaveAs可以设置一个新密码。详情请查看:http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.saveas%28VS.80%29.aspx

撰写回答