Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何强制使用excel单元格?_Java_Excel_Apache Poi_Excel 2007 - Fatal编程技术网

Java 如何强制使用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

我正在尝试强制设置一些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.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参数将在运行时引发异常。