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

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

我在他们的文档中找不到的东西是如何密码保护整个工作簿 。 我想这样做,如果有人试图打开文件,他们需要input密码才能看到数据。

请记住,这与密码保护单个工作表不同 ,它们仍然能够打开文件并查看数据,但具有只读访问权限。

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

看起来像XSSFWorkbook有一个名为setWorkbookPassword的方法,但对于SXSSF不存在,并且在SXSSFWorkbook上不起作用。 https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFWorkbook.html#setWorkbookPassword(java.lang.String,%20org.apache.poi.poifs.crypt.HashAlgorithm)

任何人都知道如何做到这一点? 替代scheme也将被考虑。

提前致谢。

UPDATE

我想也许使用启用macros的工作簿与脚本密码保护它在这里build议。 用ExcelmacrosJava Apache Poi SXSSF

我使用这里的VBA代码来做到这一点: http : //analysistabs.com/excel-vba/protect-unprotect-workbook/ ,然后在创buildExcel文件时使用该文件作为模板,但是当我正在玩macros观结果是不够的。 一些计算机安全设置设置为“高”,将禁用macros,所以当我打开文件时,我确实得到了一个密码提示,但是我也有一个警告消息说,macros被禁用,我能够查看工作簿内容。

有什么build议么?

“…我找不到在他们的文件是如何密码保护…”?

你有没有在poi主页的左边菜单中看到菜单项“encryption支持” ?

要打开(即读取)文件时请求密码提示,您需要对其进行encryption – 请参阅“基于XML的格式 – 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();