2016-11-30 142 views
0

我有一个程序可以生成大量数据的报告。使用Apache POI SXSSF生成一个xlsx文件,我可以正常工作。 http://poi.apache.org/spreadsheet/index.html如何通过SXSSF保护Excel工作簿?

,我无法在其文档中发现的事情就是如何密码保护整个工作簿。我想这样做,如果有人试图打开文件,他们需要输入密码才能看到数据。

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

我没有找到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)

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

在此先感谢。

UPDATE

我想过,也许使用带有脚本密码宏工作簿启用保护了在这里建议。 Java Apache Poi SXSSF with Excel Macros

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

有什么建议吗?

回答

3

“......我无法在其文档中找到的是如何用密码保护...” ???

你见过POI主要页面上的菜单项"Encryption support"在左边的菜单?

来打开(即读)的文件时,要求输入密码的提示,你需要对它进行加密 - 见"XML-based formats - Encryption"

和计算器喜欢拥有一切在一个地方 - 这里是代码:

// 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(); 
+0

啊我认为我非常关注关键字搜索,如“密码”或“保护”,“加密”页面没有出现。感谢你!这正是我需要的。 – yaki33

相关问题