如何使用python打开受密码保护的excel文件?
Posted
技术标签:
【中文标题】如何使用python打开受密码保护的excel文件?【英文标题】:How to open a password protected excel file using python? 【发布时间】:2013-10-27 08:47:57 【问题描述】:我查看了有关此主题的先前线程,但它们没有帮助解决问题。
how to read password protected excel in python
How to open write reserved excel file in python with win32com?
我正在尝试在没有任何用户交互的情况下在 excel 中打开受密码保护的文件。我在网上搜索,发现这段代码使用了 win32com.client 当我运行这个时,我仍然得到输入密码的提示......
from xlrd import *
import win32com.client
import csv
import sys
xlApp = win32com.client.Dispatch("Excel.Application")
print "Excel library version:", xlApp.Version
filename,password = r"\\HRA\Myfile.xlsx", 'caa team'
xlwb = xlApp.Workbooks.Open(filename, Password=password)
【问题讨论】:
【参考方案1】:我认为命名参数在这种情况下不起作用。因此,您必须执行以下操作:
xlwb = xlApp.Workbooks.Open(filename, False, True, None, password)
有关 Workbooks.Open 方法的详细信息,请参阅 http://msdn.microsoft.com/en-us/library/office/ff194819.aspx。
【讨论】:
【参考方案2】:如果您使用的是 linux 系统,Openpyxl 包可以工作。您可以通过设置密码来保护文件并使用相同的密码打开文件。
更多信息: https://www.quora.com/How-do-I-open-read-password-protected-xls-or-xlsx-Excel-file-using-python-in-Linux
【讨论】:
不,这不起作用。我看了看,发现 Openpyxl 无法打开受密码保护的 Excel。【参考方案3】:如果您的文件很小,您可以将其保存为“.csv”。 然后阅读
它对我有用:)
【讨论】:
【参考方案4】:我最近发现了一个使这项任务变得简单的 Python 库。
它不需要安装 Excel,因为它是纯 Python,它也是跨平台的!
msoffcrypto-tool 支持受密码保护(加密)的 Microsoft Office 文档,包括旧的 XLS 二进制文件格式。
安装 msoffcrypto 工具:
pip install msoffcrypto-tool
您可以从命令行创建工作簿的未加密版本:
msoffcrypto-tool Myfile.xlsx Myfile-decrypted.xlsx -p "caa team"
或者,您可以使用 msoffcrypto-tool 作为库。虽然您可以像上面那样将未加密版本写入磁盘,但您可能更愿意创建一个解密的内存文件并将其传递给您的 Python Excel 库(openpyxl
、xlrd
等) .
import io
import msoffcrypto
import openpyxl
decrypted_workbook = io.BytesIO()
with open('Myfile.xlsx', 'rb') as file:
office_file = msoffcrypto.OfficeFile(file)
office_file.load_key(password='caa team')
office_file.decrypt(decrypted_workbook)
# `filename` can also be a file-like object.
workbook = openpyxl.load_workbook(filename=decrypted_workbook)
【讨论】:
【参考方案5】:非常感谢您对此主题的精彩回答。试图整理所有这些。我的要求是打开一堆受密码保护的 excel 文件(都具有相同的密码),以便我可以对这些文件进行更多处理。请在下面找到代码。
import pandas as pd
import os
from xlrd import *
import win32com.client as w3c
import csv
import sys
from tempfile import NamedTemporaryFile
df_list=[]
# print(len(files))
for f in files:
# print(f)
if('.xlsx' in f):
xlwb = xlapp.Workbooks.Open('C:\\users\\files\\'+f, False, True, None, 'password')
temp_f = NamedTemporaryFile(delete=False, suffix='.csv')
temp_f.close()
os.unlink(temp_f.name)
xlwb.SaveAs(Filename=temp_f.name, FileFormat=xlCSVWindows)
df = pd.read_csv(temp_f.name,encoding='Latin-1') # Read that CSV from Pandas
df.to_excel('C:\\users\\files\\password_removed\\'+f)
【讨论】:
仅供参考,这不能按原样工作,您必须像原来那样设置 xlapp以上是关于如何使用python打开受密码保护的excel文件?的主要内容,如果未能解决你的问题,请参考以下文章
使用 PHPSpreadsheet 打开受密码保护的 XLSX 文件