我正在创建一个Excel文件,它应该是只读的。为此,我使用:
(sheetName).getSettings().setProtected(true);
为每个新的表格添加。
只有拥有管理员权限的人才能获得对该文件的完全访问权限,因此在确认用户具有管理员权限后,我会:
(workbookName).getSheet(0).getSettings().setProtected(false);
拥有管理员权限的人打开文件后,它不再是只读的,直到普通用户再次向其添加更多内容 - .getSettings().setProtected(true);
。换句话说,有人可以在管理员访问文件之后和非管理员之前更改文件。我不知道如何绕过它,也许你可以帮助我?
- 编辑 -
用户正在向excel文件添加数据,使用信息文件填充单元格 - 读取工作簿,复制,添加一些信息,编写和关闭工作簿。非管理员用户可以直接打开它,看看他们添加了什么,或者看看其他用户添加了什么,但是他们不能更改文件中的任何内容。
这是一个类似向导的应用程序,它会向用户询问数据,然后将单元格添加到文件中。添加数据的方法之一是here。该文件从用户收集个人信息。该应用程序仅用于添加数据,而不是用于访问数据。用户只能通过双击输出直接访问该文件,并且只能查看数据。管理员可以更改文件,其他用户不应该这样做。
答案 0 :(得分:1)
如果您愿意为商业软件付费,最新版本的ExtenXLS会对Excel支持的所有加密格式提供完全读写支持。只需构建一个EncryptedWorkBookHandle
而不是正常WorkBookHandle
。这将使用未经修改的JRE支持的最强密码,用于XLS的RC4和用于XLSX的128位AES。如果您想使用256位AES和OOXML,并且已经安装了JCE unlimited policy,则可以使用MSOfficeEncrypter
类进行安装。
JExcelAPI是一种流行的开源Java电子表格API,似乎根本不支持加密。 Aspose.Cells,商业广告supports stong encryption。 Actuate e.Spreadsheet的文档似乎从'net中消失了,所以我不知道它是否支持加密。
由于所有免费提供的Java电子表格API似乎都不支持编写加密电子表格,如果您不愿意使用商业软件,则需要提出解决方法。例如,您可以将电子表格写入加密的ZIP文件中。 java.util.zip不支持加密,但它看起来像Zip4j。
答案 1 :(得分:0)
这是因为你告诉用户可以在管理员删除保护时简单地编辑它,似乎没有标准替代方案。但是,如果这个文件正在使用,那么没有其他人可以在外面修改它吗?因此,只需在管理员退出excel文件时再次保护它,并在管理员登录时删除保护。就像Tim说的那样。您可以创建单独的函数来编辑excel文件,然后执行
禁用保护 写修改 启用保护
所有这些功能。如果这是可行的,你可以使用像AspectJ这样的东西来简化 禁用保护并启用保护 份;