как проверить, защищен ли большой файл Excel как можно быстрее - PullRequest
0 голосов
/ 06 февраля 2019

Как проверить, защищен ли файл 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 ().

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Вы можете сделать это, используя свойство 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.

0 голосов
/ 07 февраля 2019

При попытке открыть защищенную паролем рабочую книгу с помощью openpyxl это действительно выдает ошибку zipfile.BadZipFile, поэтому можно использовать обходной путь:

import zipfile
zipfile.is_zipfile("workbook.xlsx")
0 голосов
/ 06 февраля 2019

Решение с использованием библиотеки openpyxl:

import openpyxl
wb = openpyxl.load_workbook(PATH_TO_FILE)

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