POI中實現Excel工作薄的保護
阿新 • • 發佈:2019-01-10
POI只提供了sheet的保護。沒有提供工作薄的保護。
但在實現的Excel帳票輸出中,可能需要工作薄保護功能,避免使用的人手動刪除,增加sheet等。
改造POI能夠實現這個功能,但是在某些情況下資料可能會被損壞。
改造例子:
1.org/apache/poi/hssf/model/Workbook.java中追加方法。
private ProtectRecord protectRecord = null; private PasswordRecord password = null; /** * 設定工作薄保護。 * * @param protectFlag true:保護 false:不保護 * @param password 密碼 */ public void setProtectWorkBook(boolean protectFlag, String password) { // 生成ProtectRecord。 ProtectRecord recd = getProtectRecord(); recd.setProtect(protectFlag); // 設定密碼。 if (protectFlag) { PasswordRecord passworRecord = getPasswordRecord(); passworRecord.setPassword((PasswordRecord.hashPassword(password))); } } /** * 生成ProtectRecord。 * * @return ProtectRecordオブジェクト */ public ProtectRecord getProtectRecord() { if (this.protectRecord == null) { this.protectRecord = new ProtectRecord(); int i = 0; for (i = 0; i < records.size() && !(records.get(i) instanceof ProtectRecord); i++) { } records.add(i + 1, this.protectRecord); } return this.protectRecord; } /** * 生成PasswordRecord。 * * @return PasswordRecord物件 */ public PasswordRecord getPasswordRecord() { if (this.password == null) { this.password = new PasswordRecord(); int i = 0; for (i = 0; i < records.size() && !(records.get(i) instanceof PasswordRecord); i++) { } records.add(i + 1, this.password); } return this.password; }
2.org/apache/poi/hssf/usermodel/HSSFWorkbook.java中追加呼叫介面。
/** * 設定工作薄保護。 * * @param protectFlag true:保護 false:不保護 * @param passwaord 密碼 */ public void protectWorkBook(boolean protectFlag, String passwaord) { this.workbook.setProtectWorkBook(protectFlag, passwaord); }