【发布时间】:2012-04-16 21:10:21
【问题描述】:
我正在创建一个 Excel 文件,它应该是只读的。为此,我使用:
(sheetName).getSettings().setProtected(true);
每添加一张新工作表。
只有具有管理员权限的人才能获得对文件的完全访问权限,因此在确认用户具有管理员权限后,我会:
(workbookName).getSheet(0).getSettings().setProtected(false);
具有管理员权限的人打开文件后,它不再是只读的,直到普通用户向其添加更多内容-再次.getSettings().setProtected(true);。换句话说,有人可以在管理员访问文件之后和非管理员之前更改文件。我不知道如何绕过它,也许你能帮助我?
--编辑--
用户正在向 excel 文件中添加数据,用信息文件填充单元格 - 读取工作簿、复制、添加一些信息、写入和关闭工作簿。非管理员用户可以直接打开它以查看他们添加的内容是否存在,或者查看其他用户添加的内容,但他们应该无法更改文件中的任何内容。
这是一个类似向导的应用程序,它会向用户询问数据,然后将单元格添加到文件中。添加数据的方法之一是here。该文件从用户那里收集个人信息。该应用程序仅用于添加数据,而不是用于访问它。用户只能通过双击输出直接访问文件,并且只能查看数据。管理员可以更改文件,其他用户不能这样做。
【问题讨论】:
-
stackoverflow.com/questions/2609301/… 展示了如何循环工作表。为了解决非管理员用户的问题,您可以在每次打开文件时设置保护(真/假取决于访问级别)。
-
感谢您的链接,我整理出了循环播放的表格。但是,关于您对访问问题的建议,我不知道该怎么做。每次更改文件后,我都会设置保护(
true如果非管理员用户更改它,false如果管理员这样做)。问题是,在管理员将保护设置为false之后,非管理员将其设置回true之前,有人可以“手动”(而不是通过软件)打开和修改文件,此时它应该是只读的。 -
如果您知道管理员何时完成,您可以在那时重新启用保护
-
您需要添加更多关于您的应用程序如何与 Excel 文件交互的详细信息 - 用户通过您的应用程序执行哪些任务,为什么用户还需要直接打开它?跨度>
-
为什么不向非管理员用户提供主文件的副本?这样他们就可以查看内容,但他们是否可以编辑它并不重要。我仍然不清楚您的应用程序是如何设置的:Excel 文件托管在哪里——网络共享、Web 服务器或什么?所有用户都只有一个“主”文件吗?任何用户都可以双击文件打开它,还是您的 java 应用程序为他们提供访问权限?如果任何人都可以在读取模式下打开文件,那基本上是一个很难修复的坏主意。