我试图强制使用某些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中正确应用。
取消选中忽略空白复选框。 Excel仍然允许强制执行此约束的单元格留空。
Excel中忽略空白的目的可能与我不理解的不同。无论如何,我需要强制某些细胞。如果尝试清空它们,则应拒绝它并显示相应的错误消息。它可能需要在Excel中嵌入一些Visual Basic技巧/代码。
答案 0 :(得分:7)
忽略空白无法达到您想要的效果。在您描述的情况下,当用户键入单元格时,它会阻止他创建空白条目。但是,它不会阻止他退出数据输入模式(例如使用 ESC ),这也会使单元格留空。它也不会阻止他选择单元格,并且无需进入数据输入即可点击删除。
根据您要执行的操作,您可以使用VBA事件宏来测试某个事件后单元格是否为空白。这应该是Worksheet_SelectionChange
事件,Worksheet_Deactivate
事件,Workbook_Close
事件还是一个或多个其他事件,取决于项目的具体情况。
答案 1 :(得分:0)
尝试使用以下内容,它对我有用!!!!
DataValidationConstraint lengthConstraint = validationHelper.createTextLengthConstraint(
DataValidationConstraint.OperatorType.GREATER_THAN, "0", "");