Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对使用Java创建的Excel文件的访问权限_Java_Excel_Jxl - Fatal编程技术网

对使用Java创建的Excel文件的访问权限

对使用Java创建的Excel文件的访问权限,java,excel,jxl,Java,Excel,Jxl,我正在创建一个Excel文件,它应该是只读的。为此,我使用: (sheetName).getSettings().setProtected(true) 每增加一张新纸 只有具有管理员权限的人才能完全访问该文件,因此在确认用户具有管理员权限后,我会: (workbookName).getSheet(0.getSettings().setProtected(false) 拥有管理员权限的人打开文件后,该文件不再是只读的,直到普通用户向其添加更多内容–.getSettings().setProtect

我正在创建一个Excel文件,它应该是只读的。为此,我使用:
(sheetName).getSettings().setProtected(true)
每增加一张新纸

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

拥有管理员权限的人打开文件后,该文件不再是只读的,直到普通用户向其添加更多内容–
.getSettings().setProtected(true)再次。换句话说,有人可以在管理员访问该文件之后和非管理员访问之前更改该文件。我不知道该怎么办,也许你能帮我一下

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


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

如果您愿意购买商业软件,最新版本的具有对Excel支持的所有加密格式的完全读写支持。只需构造一个
EncryptedWorkBookHandle
,而不是普通的
WorkBookHandle
。这将使用未经修改的JRE支持的最强大的密码,RC4用于XLS,128位AES用于XLSX。如果您想在OOXML中使用256位AES,并且已经安装了,则可以使用
MSOfficeEncrypter

,一个流行的开源Java电子表格API,似乎根本不支持加密,商业发行。Actuate电子表格的文档似乎已经从网上消失了,所以我无法判断它是否支持加密


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

您告诉我们,当管理员删除保护时,用户只需编辑它,似乎没有标准的替代方案。但是,如果此文件正在使用中,则除此之外没有其他人可以修改它,对吗?因此,只要在管理员退出excel文件时再次保护它,并在管理员登录时删除保护即可。就像蒂姆说的。您可以创建单独的函数来编辑excel文件,然后执行以下操作:

禁用保护 写修改 启用保护

在所有这些功能中。如果这是可行的,您可以使用AspectJ之类的工具来简化 禁用保护并启用保护
零件

演示如何循环浏览工作表。为了解决非管理员用户的问题,您可以在每次打开文件时设置保护(根据访问级别设置为true/false)。感谢链接,我整理了表单中的循环。但是,关于你关于访问问题的建议,我不知道我该怎么做。每次更改文件后,我都会设置保护(
true
如果非管理员用户更改,则设置保护;如果管理员更改,则设置保护)。问题是,在管理员将保护设置为
false
之后,非管理员将文件设置回
true
之前,当文件应为只读时,有人可以“手动”(而不是通过软件)打开和修改文件。如果您知道管理员何时完成,您可以在此时重新启用保护。您需要添加更多有关应用程序如何与Excel文件交互的详细信息-用户通过您的应用程序执行哪些任务,以及用户为什么还需要直接打开它?为什么不向非管理员用户提供主文件的副本?这样他们就可以查看内容,但是否可以编辑也没关系。我还不清楚你的应用程序是如何设置的:Excel文件托管在哪里?在网络共享上,在web服务器上,还是什么?是否所有用户都只有一个“主”文件?任何用户都可以双击该文件打开它,还是您的java应用程序为他们提供了访问权限?如果任何人都可以在读取模式下打开文件,这看起来基本上是个坏主意,很难修复。