锁定图纸名称POI java的重命名



锁定工作表名称POI的重命名java

如何保护工作表名称不让用户更改

XSSFSheet sheet = ((XSSFSheet)s);
//to lock my sheet name
sheet.lockmysheetName();

我只想保护工作表名称

Microsoft Excel不提供在工作表级别锁定工作表名称。有可能保护工作簿。保护工作簿的结构。这包括图纸名称的锁定,也包括图纸顺序的锁定和插入新图纸的锁定。

这是XSSFWorkbook.lockStructure设置的内容。

HSSFWorkbook到目前为止还没有可比性。但是使用InternalWorkbookWorkbookRecordList以及关于二进制*.xls工作簿中的二进制记录流的知识可以实现相同的目的。

完整示例:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.ProtectRecord;
import org.apache.poi.hssf.model.InternalWorkbook;
import org.apache.poi.hssf.model.WorkbookRecordList;
public class CreateExcelLockStructure {

static void lockStructure(HSSFWorkbook hssfWorkbook) {
InternalWorkbook internalWorkbook = hssfWorkbook.getInternalWorkbook();
WorkbookRecordList workbookRecordList = internalWorkbook.getWorkbookRecordList();
int protpos = workbookRecordList.getProtpos();
Record record = workbookRecordList.get(protpos);
if (record instanceof ProtectRecord) {
ProtectRecord protectRecord = (ProtectRecord)record;
protectRecord.setProtect(true);
} else {
ProtectRecord protectRecord = new ProtectRecord(true);
protpos = workbookRecordList.size() - 1;
workbookRecordList.add(protpos, protectRecord);
workbookRecordList.setProtpos(protpos);
}
}
public static void main(String[] args) throws Exception {

Workbook workbook = new XSSFWorkbook(); String filePath = "./CreateExcelLockStructure.xlsx";
//Workbook workbook = new HSSFWorkbook(); String filePath = "./CreateExcelLockStructure.xls";
Sheet sheet = workbook.createSheet("SheetName1");
sheet = workbook.createSheet("SheetName2");
if (workbook instanceof XSSFWorkbook) {
XSSFWorkbook xssfWorkbook = (XSSFWorkbook)workbook;   
xssfWorkbook.lockStructure();
} else if (workbook instanceof HSSFWorkbook) {
HSSFWorkbook hssfWorkbook = (HSSFWorkbook)workbook;
lockStructure(hssfWorkbook);
}
FileOutputStream out = new FileOutputStream(filePath);
workbook.write(out);
out.close();
workbook.close();
}
}

最新更新