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);
}