我查看了有关此主题的先前主题,但他们没有帮助解决问题。
我正在尝试在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)
答案 0 :(得分:10)
我不认为命名参数在这种情况下有效。所以你必须做类似的事情:
xlwb = xlApp.Workbooks.Open(filename,False,True,None,password)
有关Workbooks.Open方法的详细信息,请参阅http://msdn.microsoft.com/en-us/library/office/ff194819.aspx。
答案 1 :(得分:3)
我最近发现了一个 Python 库,可以让这个任务变得简单。
它不需要安装 Excel,而且因为它是纯 Python,所以它也是跨平台的!
msoffcrypto-tool 支持受密码保护(加密)的 Microsoft Office 文档,包括旧的 XLS 二进制文件格式。
安装 msoffcrypto-tool:
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)
答案 2 :(得分:1)
如果您使用的是Linux系统,则Openpyxl软件包可以使用。您可以通过设置密码来保护文件安全,并使用相同的密码打开文件。
答案 3 :(得分:1)
如果文件很小,则可以将其另存为“ .csv”。 然后阅读
对我有用:)
答案 4 :(得分:0)
非常感谢您对这个主题的精彩回答。试图整理所有这些。我的要求是打开一堆受密码保护的 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, 'TDE@123')
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)