Apache POI Excel表格保护和数据验证

时间:2013-07-16 11:45:37

标签: java excel-2007 apache-poi xlsx

我正在使用Apache POI生成Excel文件(.xlsx格式)

我遇到了两件事。

首先, 我想在生成的excel文件中禁用格式化单元格等少数功能。

我已经习惯了以下代码来实现它(从Apache POI - How to protect sheet with options?得到它。

sheet.lockDeleteColumns();
sheet.lockDeleteRows();
sheet.lockFormatCells();
sheet.lockFormatColumns();
sheet.lockFormatRows();
sheet.lockInsertColumns();
sheet.lockInsertRows();
sheet.getCTWorksheet().getSheetProtection().setPassword(pwdBytes);
sheet.enableLocking();
workbook.lockStructure();

但是这段代码使生成的工作表成为只读。我无法在生成的Excel工作表中输入任何数据。

请告诉我如何仅禁用少数功能并同时启用读写功能。

其次,Excel文件中有一个日期列。我想在列级应用一些日期验证(类似于isValidDate)。

我已经尝试了 XSSFDataValidationHelper createCustomConstraint ,但没有成功,验证不适用于日期列。当我打开生成的excel文件时,我得到以下错误

Excel在文件中找到了不可读的内容。

我猜函数中有问题(createCustomConstraint(“ISNUMBER()”);.

以下是我使用的代码段。

XSSFDataValidationConstraint dateConstraint = (XSSFDataValidationConstraint) dvHelper
                .createCustomConstraint("ISNUMBER()");
        CellRangeAddressList dateAddressList = new CellRangeAddressList(0,
                10000, 2, 3);//1000rows and 3rd & 4th column
        DataValidation dateValidation = dvHelper.createValidation(
                dateConstraint, dateAddressList);
        dateValidation.setEmptyCellAllowed(true);
        dateValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
        dateValidation.createErrorBox("Error", "InValid Date.");
        dateValidation.setShowErrorBox(true);
        sheet.addValidationData(dateValidation);

请帮我解决这两个问题。

先谢谢。

1 个答案:

答案 0 :(得分:1)

我相信你的问题有两部分。

第一部分: - 我认为锁定和保护是两回事。

sheet.protectSheet(String password);

将使表格变为只读。要设置锁定选项,调用lockFormatCells() and lockDeleteColumns()sheet.enableLocking()等函数就足够了。

第二部分: - 如果你想应用DateValidation,你应该调用类似的东西。

DataValidationConstraint activationDateConstraint = validationHelper.createDateConstraint(DataValidationConstraint.OperatorType.BETWEEN, "=VLOOKUP($D3,Offices!$B$2:$D$6,3,FALSE)", "=TODAY()", "dd/mm/yy");