java - 数据验证下拉列表 - 如何禁止空值?
问题描述
我在 Excel 中创建了一个下拉列表XSSFDataValidation
。
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("test sheet");
XSSFDataValidationHelper helper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) helper.createExplicitListConstraint(new String[] { "Checked", "Unchecked" });
CellRangeAddressList addressList = new CellRangeAddressList(0, 10, 0, 0);
XSSFDataValidation validation = (XSSFDataValidation)helper.createValidation(dvConstraint, addressList);
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
我的问题如下:
- 是否可以禁止空值?我的意思是,强制用户在单元格中输入一个值。我试过
validation.setEmptyCellAllowed(false);
了,但仍然可以输入一个空值。 - 还有另一种定义默认值的方法,而不是
cell.setCellValue("Unchecked");
?
先感谢您。
解决方案
使用Excel
的数据验证列表是不可能禁止空单元格的。未选中忽略空白复选框的设置 仅可防止现有单元格从任何值更改为空值。但是选择一个单元格Excel
然后按下Del会删除整个单元格,而不仅仅是清空单元格值。但是数据验证不适用于尚未存在的单元格。所以这是一个Excel
问题,apache poi
不能做任何事情,因为apache poi
不能做Excel
不能做的事情。
我们能做的最好的事情是使用 usingExcel
的数据验证和使用apache poi
,尽可能多地和经常地告诉用户他们应该做什么。为此,我们可以在除了错误消息之外选择单元格时显示输入消息。
例子:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddressList;
class CreateExcelDataValidationList {
public static void main(String[] args) throws Exception {
//Workbook workbook = new HSSFWorkbook();
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet();
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint(new String[]{"Checked", "Unchecked"}) ;
int lastRow = workbook.getSpreadsheetVersion().getLastRowIndex();
CellRangeAddressList addressList = new CellRangeAddressList(0, 10, 0, 0);
DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
validation.setEmptyCellAllowed(false);
validation.createPromptBox("Prompt", "Please select Cecked or Unchecked from dropdown list.");
validation.createErrorBox("Error", "Please select Cecked or Unchecked from dropdown list.");
if (workbook instanceof XSSFWorkbook) validation.setShowErrorBox(true);
if (workbook instanceof XSSFWorkbook) validation.setShowPromptBox(true);
sheet.addValidationData(validation);
FileOutputStream out = null;
if (workbook instanceof HSSFWorkbook) {
out = new FileOutputStream("CreateExcelDataValidationList.xls");
} else if (workbook instanceof XSSFWorkbook) {
out = new FileOutputStream("CreateExcelDataValidationList.xlsx");
}
workbook.write(out);
workbook.close();
out.close();
}
}
不,没有其他方法可以定义默认值而不是cell.setCellValue("Unchecked");
. 那是因为在Excel
的数据验证列表中甚至没有默认值。使用Excel
的数据验证列表,只有一个有效值列表。然后对照实际单元格值检查该列表。真实的单元格值将使用Cell.setCellValue
.
推荐阅读
- node.js - 我可以只使用 axios 和网页抓取吗?
- sql - 在 T-SQL 中返回 1 或 0 而不是 value 或 null
- python - 创建一个函数,我可以在其中将名字和姓氏输入字典
- html - Div 没有拉伸到父级的 100% 高度
- sql - 如何在活动的 android 中定义新列并使用 setter、getter?
- javascript - 如何在反应js javascript中使用for循环动态更新html内容
- mysql - ERROR tool.BaseSqoopTool: Error parsing arguments for import: 将 Mysql 数据导入 S3 时
- android - 有没有办法以编程方式对 Android 上的系统权限对话框执行输入操作?
- swift - sum.swift:29:19:错误:在范围内找不到“CFAbsoluteTimeGetCurrent”
- python - 删除链表元素