Excel 中的保护功能
在Excel中可通过“保护”来控制工作表的增删,行列增删和单元写保护。
POI中如何进行保护
package demo;
import org.apache.poi.poifs.crypt.HashAlgorithm;
import org.apache.poi.ss.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetProtection;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTProtectedRanges;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTProtectedRange;
public class ExcelHelper {
public static void protect(XSSFWorkbook workbook)
{
// 保护工作薄
// Excel 默认使用 SHA-512 加密
workbook.setWorkbookPassword("password", HashAlgorithm.sha512);
// 不允许增删工作表
workbook.lockStructure();
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
XSSFSheet sheet = wb.getSheetAt(i);
// 开启工作表保护
sheet.protectSheet(password);
// 获取工作表保护的选项
CTSheetProtection protection = sheet.getCTWorksheet().getSheetProtection();
// 设置列格式
protection.setFormatColumns(false);
// 设置行格式
protection.setFormatRows(false);
// 设置允许编辑区域
CTProtectedRanges protectedRanges = sheet.getCTWorksheet().addNewProtectedRanges();
CTProtectedRange protectedRange = protectedRanges.addNewProtectedRange();
// 设置区域名称,名称中只能用 _ 作为分隔符
protectedRange.setName(MessageFormat.format("{0}_{1}", sheet.getSheetName(), 1));
// 设置 A1:A10 为允许编辑范围
protectedRange.setSqref(Lists.newArrayList(new CellRangeAddress(0, 9, 0, 0).formatAsString()));
}
}
}