如何使用python打开受密码保护的excel文件?

时间:2013-10-18 13:25:02

标签: python excel file-io passwords protected

我查看了有关此主题的先前主题,但他们没有帮助解决问题。

我正在尝试在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)

5 个答案:

答案 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 库(openpyxlxlrd等)。

    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软件包可以使用。您可以通过设置密码来保护文件安全,并使用相同的密码打开文件。

有关更多信息: https://www.quora.com/How-do-I-open-read-password-protected-xls-or-xlsx-Excel-file-using-python-in-Linux

答案 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)