gpt4 book ai didi

Python 或 LibreOffice 保存使用密码加密的 xlsx 文件

转载 作者:行者123 更新时间:2023-12-01 03:41:45 24 4
gpt4 key购买 nike

我正在尝试使用密码加密保存 Excel 文件。我尝试按照 https://help.libreoffice.org/Common/Protecting_Content_in 上的指南进行操作- 并且工作完美。然而,这是在 GUI 中,但我正在寻找在 headless 模式下使用命令行界面的解决方案。

我查看了 man libreoffice,但我在其中找不到任何内容。

同样,我也查看了 Python 3 库 openpyxl 的文档,但我也没有找到任何有用的东西。

是否可以使用命令行(或 Python 库)在 Ubuntu 14.04/16.04 上使用密码保存 Excel 2007+ 文件,并且不需要任何用户交互或 X session ?加密/p>

最佳答案

有使用 JythonApache POI 的解决方案。如果您想从 CPython/PyPy 使用它,可以使用 subprocess 模块调用外部 Jython 脚本。

  1. 我假设您已经安装了 Java JRE/JDK
  2. 使用 Excel/Calc 创建非加密 xlsx 文件,或使用 xlsxwriteropenpyxl 并将其另存为test1.xlsx
  3. 下载独立的 Jython
  4. 下载 Apache POI
  5. 在独立 Jython jar 所在的同一目录中提取 Apache POI
  6. 将以下 Jython 脚本保存为 encrypt.py:
import os
import sys
from java.io import BufferedInputStream
from java.io import FileInputStream
from java.io import FileOutputStream
from java.io import File
from java.io import IOException
from org.apache.poi.poifs.crypt import EncryptionInfo, EncryptionMode
from org.apache.poi.poifs.crypt import CipherAlgorithm, HashAlgorithm
from org.apache.poi.poifs.crypt.agile import AgileEncryptionInfoBuilder
from org.apache.poi.openxml4j.opc import OPCPackage, PackageAccess
from org.apache.poi.poifs.filesystem import POIFSFileSystem
from org.apache.poi.ss.usermodel import WorkbookFactory

def encrypt_xlsx(in_fname, out_fname, password):
# read
in_f = File(in_fname)
in_wb = WorkbookFactory.create(in_f, password)
in_fis = FileInputStream(in_fname)
in_wb.close()

# encryption
out_poi_fs = POIFSFileSystem()
info = EncryptionInfo(EncryptionMode.agile)
enc = info.getEncryptor()
enc.confirmPassword(password)
opc = OPCPackage.open(in_f, PackageAccess.READ_WRITE)
out_os = enc.getDataStream(out_poi_fs)
opc.save(out_os)
opc.close()

# write
out_fos = FileOutputStream(out_fname)
out_poi_fs.writeFilesystem(out_fos)
out_fos.close()

if __name__ == '__main__':
in_fname = sys.argv[1]
out_fname = sys.argv[2]
password = sys.argv[3]
encrypt_xlsx(in_fname, out_fname, password)
  • 从控制台调用它:
  • java -cp "jython-standalone-2.7.0.jar:poi-3.15/lib/commons-codec-1.10.jar:poi-3.15/lib/commons-collections4-4.1.jar:poi-3.15/poi-3.15.jar:poi-3.15/poi-ooxml-3.15.jar:poi-3.15/poi-ooxml-schemas-3.15.jar:poi-3.15/ooxml-lib/curvesapi-1.04.jar:poi-3.15/ooxml-lib/xmlbeans-2.6.0.jar" org.python.util.jython -B encrypt.py test1.xlsx test1enc.xlsx 12345678

    地点:

    • encrypt.py - 脚本名称
    • test1.xlsx - 输入文件名
    • test1enc.xlsx - 输出文件名
    • 12345678 - 密码

    最终的加密 xslx 应位于test1enc.xlsx 中。

    关于Python 或 LibreOffice 保存使用密码加密的 xlsx 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39509741/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com