шифрование листа книги Excel с помощью python

В настоящее время я внедряю инструмент для автоматизации части моей повседневной работы. Поэтому мне нужно создать инструмент python, который создает файл excel (книгу) с несколькими данными и шифрует листы файла. Первая часть, которая создает файл и заполняет его данными, работает отлично.

Но шифрование вообще не работает. Я использую win32com, win32com.client и openpyxl. В рабочей тетради есть два разных листа с названиями «1» и «2».

Моя рабочая тетрадь:

import win32com.client
import os, sys, win32com, os.path, time

excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True
workbook = excel.Workbooks.Open(reading_path) ####this is the path where the file is stored
sheet = workbook.Worksheets(1)

Я просмотрел другие темы и получил следующее:

import openpyxl    
sheet.protection.set_password('test') 
sheet.save(saving_path) 

К сожалению, это не работает ... Моя оболочка ответила AttributeError. В деталях:

AttributeError: <unknown>.set_password

Кто-нибудь знает другой способ, как зашифровать только страницы в Excel с помощью python?

Спасибо большое за вашу помощь!


person Shafranov    schedule 26.07.2018    source источник


Ответы (1)


Не совсем понятно, что вы подразумеваете под «шифрованием листа», поскольку код openpyxl, на который вы ссылаетесь, не имеет ничего общего с шифрованием; см. предупреждение в документации. Однако Excel поддерживает шифрование всех книг, но, похоже, это отличается от того, что вы хотите.

В любом случае ваш код не работает, потому что sheet, который вы получаете от win32com, сильно отличается от того, что ожидает openpyxl. Например, sheet, основанный на COM, требует, чтобы процесс Excel был запущен для возможности манипулирования, в то время как openpyxl даже не требует, чтобы Excel был доступен на хост-машине.

Теперь, в вашем конкретном случае, вам на самом деле не нужен openpyxl (хотя вы можете обнаружить, что его использование вместо win32com имеет множество преимуществ), и вы можете полностью остаться в рамках COM. Таким образом, добавить защиту паролем можно с помощью Worksheet.Protect, что в вашем случае сводится к простому запуску

sheet.Protect('test')
person fuglede    schedule 26.07.2018