Добавить пароль (без присмотра) в существующий xlsx без эксклюзивных инструментов Windows

1

Я создаю файл xlsx, используя Openpyxl. И я хотел бы защитить книгу самостоятельно, используя пароль, который у меня есть как переменная в том же script. Это можно установить вручную, используя "Файл" > "Пароли".. и установить "Пароль для открытия" в самом Excel.

Openpyxl только, кажется, предлагает защиту на основе листа с помощью ws.protection.set_password("mypassword") (где ws - открытый лист)

Я не могу найти точные примеры, но где-то я читал, что файлы xlsx были в основном zip-архивами, и, хотя казалось, что, когда я запускал команды типа unzip -t и 7z x, кажется, что добавление пароля с помощью утилит например, 7z или zipcloak полностью разрывает файл, когда он возвращается вместе.

 % 7z x ../sample.xlsx .

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,4 CPUs x64)

Scanning the drive for archives:
1 file, 98370 bytes (97 KiB)

Extracting archive: ../sample.xlsx
--
Path = ../sample.xlsx
Type = zip
Physical Size = 98370


No files to process
Everything is Ok

Files: 0
Size:       0
Compressed: 98370
 % 7z a -pmypassword sample.xlsx

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,4 CPUs x64)

Scanning the drive:
1 file, 6148 bytes (7 KiB)

Creating archive: sample.xlsx

Items to compress: 1


Files read from disk: 1
Archive size: 367 bytes (1 KiB)
Everything is Ok
 % open sample.xlsx

При открытии с помощью Excel:

Excel не может открыть файл sample.xlsx, поскольку формат файла или расширение файла недопустимо. Убедитесь, что файл не был поврежден и что расширение файла соответствует формату файла.

Обратите внимание, что результат такой же, независимо от того, какой тип я использую с 7z, а также с zipcloak.

До сих пор я рассматривал свои варианты с помощью Bash и Python, и это кажется довольно тяжелым. Но я в значительной степени открыт для чего-либо.. Машины, которые я делаю это, запускают OS X и Debian.

Теги:
excel
xlsx

1 ответ

1

То, что вы запрашиваете, в настоящее время не доступно ни в одном пакете Python. На данный момент лучше всего установить пакет, реализованный на каком-то другом языке, и вызвать этот пакет из Python (используя os.system() или subprocess или что-то в этих строках).

Два из них, которые я знаю,

secure-spreadsheet - это в основном оболочка командной строки для xlsx-populate.

Похоже, вы хотите сделать это без установки Excel, но для полноты я упомянул, что если у вас установлен Excel, то другой способ сделать это - автоматизировать сам Excel, что можно сделать в Python, используя xlwings или базовые пакеты, от которых он зависит: pywin32 в Windows или appscript на Mac.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню