Java 如何强制使用excel单元格?
我正在尝试强制设置一些excel单元格,以便在用户将其留空时显示消息Java 如何强制使用excel单元格?,java,excel,apache-poi,excel-2007,Java,Excel,Apache Poi,Excel 2007,我正在尝试强制设置一些excel单元格,以便在用户将其留空时显示消息 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Data Validation"); DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper(); DataValidationConstraint lengthConstraint
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.setEmptyCellAllowedfalse;并期望它能防止细胞被清空,但它不起作用。但是,将针对长度在2到45个字符之间的单元格验证此约束
为什么validation.setEmptyCellAllowedfalse;在这种情况下不起作用?如何使单元格成为必填单元格,使其不能为空
当validation.setEmptyCellAllowedfalse失败时;方法,似乎在Excel中正确应用了验证约束
未选中“忽略空白”复选框。Excel仍然允许将强制执行此约束的单元格留空
Excel中忽略空白的目的可能与我不理解的不同。无论如何,我需要强制某些单元格。如果试图清空它们,则应拒绝并显示相应的错误消息。它可能需要在Excel中嵌入一些Visual Basic技巧/代码。忽略空白并不能实现您想要的功能。在您描述的情况下,当用户在单元格中键入内容时,它会阻止用户创建空白条目。但是,这不会阻止他退出数据输入模式,例如使用ESC,这也会使单元格保持空白。这也不会阻止他选择单元格,并在不进入数据输入的情况下点击Delete
根据具体操作,可以使用VBA事件宏来测试特定事件后单元格是否为空。这应该是工作表选择更改事件、工作表停用事件、工作簿关闭事件还是一个或多个其他事件,取决于您项目的具体情况。尝试以下操作,它对我有效
DataValidationConstraint lengthConstraint = validationHelper.createTextLengthConstraint(
DataValidationConstraint.OperatorType.GREATER_THAN, "0", "");
据我所知,对于您的问题,没有任何解决方案可以仅使用本机Excel功能来完成。但是,每当安装Excel时,都会安装VBA而不是VB。宏的运行可能受到安全策略的限制。尝试以下操作:打开Excel,右键单击图纸选项卡并选择“查看代码”。如果代码窗口打开,则安装了VBA。@Tiny正在标记我的comment@Tiny然后,您应该能够使用适当的事件代码,除非安全策略阻止运行宏。正如我在回答中所写的那样,具体使用哪一种取决于具体情况。也许我不需要验证,因为有一个学习曲线。我从未使用过VBA,我对Visual Basic完全不熟悉。是否可以将语言更改为C?VBA Visual Basic for Applications在许多方面不同于Visual Basic和C。据我所知,Excel VBA模块中没有其他语言可以使用-只有createTextLengthConstraint方法的VBAthird参数将在运行时引发异常。