14

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

我正在尝试在没有任何用户交互的情况下在 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)
4

5 回答 5

20

我认为命名参数在这种情况下不起作用。因此,您必须执行以下操作:

xlwb = xlApp.Workbooks.Open(filename, False, True, None, password)

有关 Workbooks.Open 方法的详细信息,请参阅http://msdn.microsoft.com/en-us/library/office/ff194819.aspx

于 2014-01-21T13:39:14.187 回答
6

我最近发现了一个 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 库(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)
    
于 2021-03-30T22:13:53.243 回答
1

如果您的文件很小,您可以将其保存为“.csv”。然后阅读

它对我有用:)

于 2020-04-17T09:38:53.830 回答
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, '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)
        

      
于 2021-04-09T05:52:03.527 回答
0

如果您使用的是 linux 系统,Openpyxl 包可以工作。您可以通过设置密码来保护文件并使用相同的密码打开文件。

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

于 2019-06-19T07:41:00.817 回答