poi-3.1-final 增加数据验证(between and操作符)
前言:这个版本还没有dvconstraint,只能使用HSSFDataValidation进行验证
步骤解析:
- 我们需要创建或者读取一个workbook
- 创建一个sheet
- 创建一个HSSFDataValidation的对象
- 设置数据类型
- 设置公式
- 设置ERROR TYPE
- 创建ERROR box(很关键,否则会不生效)
- 设置其他属性
简单的代码:
public void operatorTest(){
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("测试");
HSSFDataValidation d1 = new HSSFDataValidation((short) 0, (short)
0, (short) 20, (short) 30);
d1.setDataValidationType(HSSFDataValidation.DATA_TYPE_INTEGER);
d1.setFirstFormula("1");
d1.setSecondFormula("200");
d1.setOperator(HSSFDataValidation.OPERATOR_BETWEEN);
//d1.setErrorStyle(HSSFDataValidation.ERROR_STYLE_STOP);
d1.setErrorStyle(HSSFDataValidation.ERROR_STYLE_WARNING);
sheet.addValidationData(d1);
try{
FileOutputStream fos = new FileOutputStream("d:\\tmp.xls");
wb.write(fos);
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
附下拉框的代码:
public void createDropDown() {
// excel上生成下拉筐
// 先定义两个值"有";"无"
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("测试");
HSSFRow row;
HSSFCell cell;
short m = 0;
row = sheet.createRow(m + 0);
cell = row.createCell((short) 26);
cell.setCellValue("有"); // 有
m++;
row = sheet.createRow(m + 0);
cell = row.createCell((short) 26);
cell.setCellValue("无"); // 无
m++;
String strFormula = "$AA$1:$AA$2"; // 表示AA列1-2行作为下拉列表来源数据
HSSFDataValidation data_validation = new HSSFDataValidation((short) (2), (short) 2, (short) (5), (short) (7 - 1)); // 规定形成下拉筐的范围;(第二行第二列到第五行第k-1列)
data_validation.setDataValidationType(HSSFDataValidation.DATA_TYPE_LIST);
data_validation.setFirstFormula(strFormula);
data_validation.setSecondFormula(null);
data_validation.setExplicitListFormula(true);
data_validation.setSurppressDropDownArrow(false);
data_validation.setEmptyCellAllowed(false);
data_validation.setShowPromptBox(false);
data_validation.setShowErrorBox(true);
// sheet.a
sheet.addValidationData(data_validation); // 把数据有效性放入到一个sheet里;
try{
FileOutputStream fos = new FileOutputStream("d:\\tmp.xls");
wb.write(fos);
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
出现的问题:
- 只设置了DataValidation的数据类型时,提示null point.
需要设置公式 - 设置好的公式打开并不生效。
需要创建错误窗口 - 未去解决的问题,提示的中文乱码.
总结:了解了一下Excel的poi验证,对excel的数据验证文档具体为对象HSSF,包括操作符,第一个操作数,第二个操作数等都是很相像的。