如何使用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 库(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)

【讨论】:

【参考方案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文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置excel打开密码

如何读写受密码保护的excel文件?

使用 PHPSpreadsheet 打开受密码保护的 XLSX 文件

EXCEL可以打开,但是无法选择(CTRL+A也不行)复制和编辑,怎么解除??

excel文件损坏打不开怎么办

使用 python-xlsxwriter 或 bash 打开受密码保护的 ods 文件