簡體   English   中英

如何盡快檢查大型 Excel 文件是否受到保護?

[英]How to check if a large Excel file is protected as quickly as possible?

如何以最快的方式檢查excel文件是否受密碼保護(無需嘗試打開它並設置異常)?

更新:

from zipfile import *
from openpyxl import load_workbook
filename = 'Z:\\path_to_file\\qwerty.xlsm' # protected one
try:
    wb = load_workbook(filename, data_only=True, read_only=True) 
except (BadZipfile) as error:
    print(is_zipfile(filename))

一個問題是我得到了False作為輸出,因此我無法擺脫異常並將其替換為is_zipfile()條件。

使用 openpyxl 庫的解決方案:

import openpyxl
wb = openpyxl.load_workbook(PATH_TO_FILE)

if wb.security.lockStructure == None:
    #  no password, act accordingly
    ...
else:
    #  password, act accordingly
    ...

您可以使用工作表的protection._password屬性執行此操作:

wb = openpyxl.load_workbook("C:\\Users\\...\\Downloads\\some_workbook.xlsx")

print(wb.worksheets[0].protection._password)

您可以根據工作簿中的工作表為您想要的任何工作表執行此操作。

如果沒有密碼,則值為None 否則,它返回散列的密碼。

因此,您可以創建一個方法來檢查這一點:

def password_protected(sheet):
   if sheet.protection._password is None:
      return False
   return True

同樣的方法適用於整個工作簿,屬性只是workbook.protection._workbook_password

當嘗試使用 openpyxl 打開受密碼保護的工作簿時,這確實會出現錯誤 zipfile.BadZipFile 因此解決方法是使用:

import zipfile
zipfile.is_zipfile("workbook.xlsx")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM