4

我正在创建一个 Excel 文件,它应该是只读的。为此,我使用: (sheetName).getSettings().setProtected(true); 对于添加的每个新工作表。

只有具有管理员权限的人才能获得对该文件的完全访问权限,因此在确认用户具有管理员权限后,我会: (workbookName).getSheet(0).getSettings().setProtected(false);

在具有管理员权限的人打开文件后,它不再是只读的,直到普通用户.getSettings().setProtected(true);再次向其中添加更多内容。换句话说,有人可以在管理员访问文件之后和非管理员之前更改文件。我不知道如何解决它,也许你可以帮助我?

--EDIT--
用户正在向 excel 文件添加数据,用信息文件填充单元格 - 读取工作簿,复制,添加一些信息,写入和关闭工作簿。非管理员用户可以直接打开它以查看他们添加的内容是否存在,或者查看其他用户添加的内容,但他们不应该能够更改文件中的任何内容。

这是一个类似向导的应用程序,它会向用户询问数据,然后将单元格添加到文件中。添加数据的方法之一是here。该文件从用户那里收集个人信息。该应用程序仅用于添加数据,而不是用于访问它。用户只能通过双击输出直接访问文件,并且只能查看数据。管理员可以更改文件,其他用户不应该这样做。

4

2 回答 2

1

如果您愿意为商业软件付费,最新版本的ExtenXLS对 Excel 支持的所有加密格式都有完整的读写支持。只需构造一个EncryptedWorkBookHandle而不是正常的WorkBookHandle. 这将使用未经修改的 JRE 支持的最强密码,用于 XLS 的 RC4 和用于 XLSX 的 128 位 AES。如果您想将 256 位 AES 与 OOXML 一起使用,并且您已经安装了JCE 无限制策略,您可以使用MSOfficeEncrypter该类来执行此操作。

JExcelAPI是一种流行的开源 Java 电子表格 API,似乎根本不支持加密。Aspose.Cells是一种商业产品,支持强加密。Actuate 的 e.Spreadsheet 的文档似乎已经从网上消失了,所以我不知道它是否支持加密。

由于免费提供的 Java 电子表格 API 似乎都不支持编写加密电子表格,因此如果您不愿意使用商业软件,则需要想出一个解决方法。例如,您可以将电子表格写入加密的 ZIP 文件。java.util.zip 不支持加密,但它看起来像Zip4j

于 2012-04-22T05:28:01.213 回答
0

事情是这样的,因为您告诉用户可以在管理员删除保护时简单地对其进行编辑,似乎没有标准的替代方案。但是,如果这个文件正在使用中,那么没有其他人可以在外面修改它吗?因此,只需在管理员退出 excel 文件时再次保护它,并在管理员登录时删除保护。就像蒂姆说的那样。您可以创建单独的函数来编辑 excel 文件,然后执行

禁用保护写修改启用保护

在所有这些功能中。如果这是可行的,您可以使用 AspectJ 之类的东西来简化禁用保护和启用保护部分;

于 2012-04-27T08:44:56.137 回答