标签:
从3.8开始,POI使用.xls和.xlsx格式处理数据校验略有不同之处。
1)针对一个或多个预定义值检查用户输入到单元格的值
以下代码将限制用户能输入到单元格A1的值是三个整数值(10、20、30)之一:
Workbook workbook = new XSSFWorkbook(); // 或者new HSSFWorkbook
Sheet sheet = workbook.createSheet("Data Validation");
// 数据验证帮助类
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
// 创建一个期望列表约束,需要期望值的数组参数
DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint(new String[]{"13", "23", "33"});
// 单元格数组引用,这是单元格A1(第一行索引、最后一行索引、第一列索引、最后一列索引)
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
// 使用数据验证约束和单元格引用创建数据验证
DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
// 此处2003和2007格式的设置略有不同
if (validation instanceof XSSFDataValidation) {
validation.setSuppressDropDownArrow(false);
validation.setShowErrorBox(true);
} else {
validation.setSuppressDropDownArrow(true);
}
sheet.addValidationData(validation);
2)下载列表
该代码将同样的事情,但提供用户从下拉列表中选择一个值。
Workbook workbook = new XSSFWorkbook(); // or new HSSFWorkbook
Sheet sheet = workbook.createSheet("Data Validation");
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint(new String[]{"13", "23", "33"});
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
if (validation instanceof XSSFDataValidation) {
validation.setSuppressDropDownArrow(true);
validation.setShowErrorBox(true);
} else {
validation.setSuppressDropDownArrow(false);
}
sheet.addValidationData(validation);
3)定制错误信息
创建消息框显示用户输入的值是无效的。
// 设置错误样式,有效值STOP、WARNING、INFO
validation.setErrorStyle(DataValidation.ErrorStyle.STOP);
// 设置错误提示框的标题和消息
validation.createErrorBox("Box Title", "Message Text");
4)提示
当包含数据验证的单元格获得焦点时用户将看到一个提示。
validation.createPromptBox("Title", "Message Text");
validation.setShowPromptBox(true);
5)更高级的数据验证
与dvHelper.createExplicitListConstraint类似DataValidationHelper类还定义了一系列的createXxxConstraint方法来实现各种Excel的验证功能。
标签:
原文地址:http://my.oschina.net/u/2000201/blog/479916