首页 文章

如何通过SXSSF保护Excel工作簿?

提问于
浏览 1553
0

我有一个程序,可以生成包含大量数据的报告 . 我使用Apache POI SXSSF正常工作以生成xlsx文件 . http://poi.apache.org/spreadsheet/index.html

我在他们的文档中找不到的是如何用密码保护 ENTIRE WORKBOOK . 我想要它,以便如果有人试图打开文件,他们需要输入密码才能看到数据 .

请记住,这与密码保护 a single worksheet 不同,它们仍然可以打开文件并查看数据但具有只读访问权限 .

我在SXSSFWorkbook文档中找不到任何内容:https://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html

看起来有一种名为setWorkbookPassword的XSSFWorkbook方法,但是它不能在SXSSFWorkbook上工作 . https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFWorkbook.html#setWorkbookPassword(java.lang.String,%20org.apache.poi.poifs.crypt.HashAlgorithm)

任何人都知道如何做到这一点?还将考虑替代解决方法 .

提前致谢 .

UPDATE

我想过可能会使用支持宏的工作簿和脚本来密码保护它,如此处所示 . Java Apache Poi SXSSF with Excel Macros

我使用这里的VBA代码来做到这一点:http://analysistabs.com/excel-vba/protect-unprotect-workbook/然后在创建Excel文件时使用该文件作为模板但是当我玩宏时它发现它是不够的 . 一些计算机安全设置被设置为"High"并将禁用宏,所以当我打开文件时,我确实得到了密码提示,但后来我还收到一条警告消息,说明宏被禁用,我能够查看工作簿内容 .

有什么建议?

1 回答

  • 3

    “......我在他们的文档中找不到如何密码保护......”???

    你在poi主页的左侧菜单中看到了菜单项"Encryption support"吗?

    打开(即读取)文件时请求密码提示,您需要对其进行加密 - 请参阅"XML-based formats - Encryption"

    并且stackoverflow喜欢在一个地方拥有所有东西 - 这是代码:

    // create a new POIFSFileSystem, which is the container for 
    // encrypted OOXML-based files  
    POIFSFileSystem fs = new POIFSFileSystem();
    EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile);
    
    // setup the encryption
    Encryptor enc = info.getEncryptor();
    enc.confirmPassword("foobaa");
    
    // after writing to the SXSSF workbook you need the content
    // as a stream
    InputStream is = <open the SXSSF workbook as stream>
    OutputStream os = enc.getDataStream(fs);
    // copy the stream to the OutputStream
    IOUtils.copy(is, os);
    
    // Write out the encrypted version
    FileOutputStream fos = new FileOutputStream("...");
    fs.writeFilesystem(fos);
    fos.close();
    

相关问题