解密Excel文件
你好,我有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