如何强制使用excel单元格?

时间:2014-09-25 18:33:24

标签: java excel apache-poi excel-2007

我试图强制使用某些excel单元格,以便在用户将其留空时显示消息。

Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Data Validation");

DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
DataValidationConstraint lengthConstraint = dataValidationHelper.createTextLengthConstraint(
        DataValidationConstraint.OperatorType.BETWEEN, "2", "45");

CellRangeAddressList cellList = new CellRangeAddressList(0, 0, 1, 1);
DataValidation validation = dataValidationHelper.createValidation(lengthConstraint, cellList);

validation.setErrorStyle(ErrorStyle.STOP);
validation.createErrorBox("Error", "The length must be between 2 and 45.");
validation.setEmptyCellAllowed(false);

if (validation instanceof XSSFDataValidation) {
    validation.setSuppressDropDownArrow(false);
    validation.setShowErrorBox(true);
} else {
    validation.setSuppressDropDownArrow(true);
}

sheet.addValidationData(validation);

Row row = sheet.createRow(0);
Cell cell = row.createCell(1);
cell.setCellValue("Text");

我使用validation.setEmptyCellAllowed(false);并期望它应该防止细胞被清空但它不起作用。但是,强制执行此约束的单元格的长度为2到45个字符。

为什么validation.setEmptyCellAllowed(false);在这种情况下不起作用?如何使单元格成为必需单元以使其不能留空?


使用validation.setEmptyCellAllowed(false);方法时,似乎验证约束在Excel中正确应用。

enter image description here

取消选中忽略空白复选框。 Excel仍然允许强制执行此约束的单元格留空。

Excel中忽略空白的目的可能与我不理解的不同。无论如何,我需要强制某些细胞。如果尝试清空它们,则应拒绝它并显示相应的错误消息。它可能需要在Excel中嵌入一些Visual Basic技巧/代码。

2 个答案:

答案 0 :(得分:7)

忽略空白无法达到您想要的效果。在您描述的情况下,当用户键入单元格时,它会阻止他创建空白条目。但是,它不会阻止他退出数据输入模式(例如使用 ESC ),这也会使单元格留空。它也不会阻止他选择单元格,并且无需进入数据输入即可点击删除

根据您要执行的操作,您可以使用VBA事件宏来测试某个事件后单元格是否为空白。这应该是Worksheet_SelectionChange事件,Worksheet_Deactivate事件,Workbook_Close事件还是一个或多个其他事件,取决于项目的具体情况。

答案 1 :(得分:0)

尝试使用以下内容,它对我有用!!!!

DataValidationConstraint lengthConstraint = validationHelper.createTextLengthConstraint(
                DataValidationConstraint.OperatorType.GREATER_THAN, "0", "");
相关问题