2012-04-16 43 views
3

我正在創建一個Excel文件,它應該是隻讀的。要做到這一點,我使用: (sheetName).getSettings().setProtected(true); 添加每個新工作表。對使用​​Java創建的Excel文件的訪問權限

只有具有管理員權限的人可以得到完全訪問文件,所以以後確認用戶具有管理員權限怎麼辦: (workbookName).getSheet(0).getSettings().setProtected(false);

有人用管理員權限打開該文件後,它不是隻讀了,直到普通用戶再添加一些內容 - .getSettings().setProtected(true);。換句話說,有人可以在管理員訪問它之後和非管理員訪問之前更改該文件。我不知道如何繞過它,也許你可以幫助我?

- 編輯 -
用戶都將數據添加到Excel文件,填充細胞信息文件 - 讀取的工作簿,複製,添加一些信息,寫入和關閉工作簿。非管理員用戶可以直接打開它以查看他們添加的內容,或查看其他用戶添加的內容,但他們不應該能夠更改文件中的任何內容。

這是一個類似嚮導的應用程序,向用戶詢問數據,然後將單元格添加到文件中。添加數據的方法之一是here。該文件收集用戶的個人信息。該應用程序僅用於添加數據,而不用於訪問它。用戶只能通過雙擊輸出直接訪問文件,並且只能查看數據。管理員可以更改文件,其他用戶不應該這樣做。

+1

http://stackoverflow.com/questions/2609301/password-protected-excel-file顯示如何循環通過工作表。要解決非管理員用戶的問題,可以在每次打開文件時設置保護(取決於訪問級別,爲true/false)。 – 2012-04-16 23:21:03

+0

感謝您的鏈接,我整理了循環通過牀單。然而,關於您在訪問問題上的建議,我看不到我該怎麼做。每次修改文件後,我都會設置保護(如果非管理員用戶更改它,則爲'true',如果管理員爲'false')。問題在於,在管理員將保護設置爲「false」並且非管理員將其設置回「true」之前,某人可以「手動」(而不是通過軟件)打開並修改該文件。 – Hurdler 2012-04-17 19:48:10

+1

如果您知道管理員何時完成,那麼您可以重新啓用該保護功能 – 2012-04-17 21:55:32

回答

1

如果您願意支付商業軟件費用,則最新版本ExtenXLS對Excel支持的所有加密格式均具有完全的讀寫支持。只需構建一個EncryptedWorkBookHandle而不是正常的WorkBookHandle。這將使用未經修改的JRE支持的最強密碼,用於XLS的RC4和用於XLSX的128位AES。如果您想在OOXML中使用256位AES,並且安裝了JCE unlimited policy,則可以使用MSOfficeEncrypter類。

JExcelAPI,一個流行的開源Java API的電子表格,不會出現在所有支持加密。 Aspose.Cells,一個商業產品,supports stong encryption。 Actuate的e.Spreadsheet的文檔似乎已經從網上消失了,所以我不能說它是否支持加密。

由於沒有任何免費提供的Java電子表格的API似乎支持加密寫入電子表格,如果你不是願意使用商業軟件,你需要拿出一個解決辦法。例如,您可以將電子表格寫入加密的ZIP文件。 java.util.zip不支持加密,但看起來像Zip4j

0

這裏的東西,因爲你告訴的是,當和管理員刪除保護,似乎有沒有標準的替代用戶可以簡單地編輯。但是,如果這個文件正在使用,那麼沒有其他人可以修改它以外的權利?所以只是簡單地再次保護它,當轄退出Excel文件,並刪除保護時,就像蒂姆管理員日誌說。您可以創建單獨的功能來編輯Excel文件,然後做

禁用保護 寫入修改 啓用保護

在所有這些功能。如果這是可行的,你可以使用AspectJ之類的東西來簡化 禁用保護並啓用保護 部分;