用POI高效导出Excel下拉框显示数据,并且设置只能选择下拉框里的数据,如果自己输入则会进行提示,以及当选框聚焦时进行提示。
看成果:
1.设置下拉列表
//设置下拉列表
Sheet data_validation = workbook.createSheet("Data Validation");
CellRangeAddressList addressList = new CellRangeAddressList(
0, 0, 0, 0);
DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(
new String[]{"10", "20", "30"});
DataValidation dataValidation = new HSSFDataValidation
(addressList, dvConstraint);
dataValidation.setSuppressDropDownArrow(false);
2.
出现错误时的消息: 创建一个消息框,如果用户输入的值无效,将向用户显示该消息框。
dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP);
dataValidation.createErrorBox("提示", "不允许自己输入,请选择下拉框里的数据");
3.
提示: 创建一个提示,当包含数据验证的单元格收到焦点时,用户将看到该提示
dataValidation.createPromptBox("提示", "请选择下拉框里的数据");
dataValidation.setShowPromptBox(true);
4.
data_validation.addValidationData(dataValidation);
多列下拉列表
//第一列下拉框
Sheet hidden = workbook.createSheet("hidden");
Sheet hidden2 = workbook.createSheet("hidden2");
//获取到数据源
BaseRespBo baseRespBo = ytVehicleDocumentService.postToDZTSH(json.toJSONString(), dztshAddress +
"/vehicleDocument/**");
//这里我是根据我自己的业务进行处理数据,和本次的下拉框导出无关
String[] company = new String[baseRespBo.getPageData().size()];
String[] companyDuty = new String[baseRespBo.getPageData().size()];
for (int j = 0; j < baseRespBo.getPageData().size(); j++) {
String[] split = baseRespBo.getPageData().get(j).toString().split(",");
String substring = split[0].substring(17, split[0].length());
String substring1 = split[1].substring(15, split[1].length() - 1);
company[j] = substring;
companyDuty[j] = substring1;
}
//这里正式开始
Cell cell = null;
for (int k = 0; k < company.length; k++) {
String companyName = company[k];
//hidden是在上面新创建的Sheet,作为一个数据处理中转站
Row row1 = hidden.createRow(k);
cell = row1.createCell(0);
cell.setCellValue(companyName);
}
HSSFName namedCell = workbook.createName();
namedCell.setNameName("hidden");
//照写就行
namedCell.setRefersToFormula("hidden!$A$1:$A$" + company.length);
DVConstraint constraint = DVConstraint.createFormulaListConstraint("hidden");
//CellRangeAddressList(开始行,终止行,开始列,终止列)
CellRangeAddressList regions = new CellRangeAddressList(1, 50, 1, 1);
HSSFDataValidation dataValidation1 = new HSSFDataValidation(regions, constraint);
workbook.setSheetHidden(1, true);
dataValidation1.setSuppressDropDownArrow(false);
/**
* 出现错误时的消息:
* 创建一个消息框,如果用户输入的值无效,将向用户显示该消息框。
*/
dataValidation1.setErrorStyle(HSSFDataValidation.ErrorStyle.STOP);
dataValidation1.createErrorBox("提示", "不允许自己输入,请选择下拉框里的数据");
/**
* 提示:
* 创建一个提示,当包含数据验证的单元格收到焦点时,用户将看到该提示
*/
dataValidation1.createPromptBox("提示", "请选择下拉框里的数据");
dataValidation1.setShowPromptBox(true);
data_validation.addValidationData(dataValidation1);
//第二列下拉框
//基本和上面相差不大
Cell cell2 = null;
for (int k = 0; k < companyDuty.length; k++) {
String companyDutys = companyDuty[k];
Row row2 = hidden2.createRow(k);
cell2 = row2.createCell(0);
cell2.setCellValue(companyDutys);
}
HSSFName namedCell2 = workbook.createName();
namedCell2.setNameName("hidden2");
namedCell2.setRefersToFormula("hidden2!$A$1:$A$" + companyDuty.length);
DVConstraint constraint2 = DVConstraint.createFormulaListConstraint("hidden2");
CellRangeAddressList regions2 = new CellRangeAddressList(1, 50, 2, 2);
HSSFDataValidation dataValidation2 = new HSSFDataValidation(regions2, constraint2);
workbook.setSheetHidden(2, true);
dataValidation2.setSuppressDropDownArrow(false);
/**
* 出现错误时的消息:
* 创建一个消息框,如果用户输入的值无效,将向用户显示该消息框。
*/
dataValidation2.setErrorStyle(HSSFDataValidation.ErrorStyle.STOP);
dataValidation2.createErrorBox("提示", "不允许自己输入,请选择下拉框里的数据");
/**
* 提示:
* 创建一个提示,当包含数据验证的单元格收到焦点时,用户将看到该提示
*/
dataValidation2.createPromptBox("提示", "请选择下拉框里的数据");
dataValidation2.setShowPromptBox(true);
data_validation.addValidationData(dataValidation2);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/105116.html