【发布时间】:2018-12-03 05:32:24
【问题描述】:
在这里,我使用[Apache POI] 创建一个excel 模板,用户可以填写数据。在这两个下拉列表中。想要创建一个依赖于前一个单元格的下拉列表的下拉列表。 例如: 如果我在单元格 3 中选择蔬菜类别,“米饭、凝乳、牛奶”项目将出现在单元格 4 的相关下拉列表中。代码如下。
在这里收集数据
List<InternetItemResponse> internetItems = internetItemService.getAllByHotelId(hotelId);
if (CollectionUtils.isNotEmpty(internetItems)) {
String[] itemsName = new String[internetItems.size()];
String[] itemsCategory = new String[internetItems.size()];
String itemName;
String itemCategory;
Map<String, Set<String>> categoryVsItemName = new HashMap<>();
Set<String> itemList;
for (int i = 0; i < internetItems.size(); i++) {
InternetItemResponse itemResponse = internetItems.get(i);
if (itemResponse != null) {
itemCategory = itemResponse.getCategory();
if (!StringUtils.isEmpty(itemCategory)) {
itemsCategory[i] = itemCategory;
itemName = itemResponse.getTitle();
itemsName[i] = itemName;
if (CollectionUtils.isEmpty(categoryVsItemName.get(itemCategory))) {
itemList = new HashSet<>();
itemList.add(itemName);
categoryVsItemName.put(itemCategory, itemList);
} else {
categoryVsItemName.get(itemCategory).add(itemName);
}
}
}
}
}
在下拉列表中分配数据
// Setting drop down values
for (int i = 0; i < headerColumns.length; i++) {
if (i == 3) {
XSSFDataValidationHelper mealdvHelper = new XSSFDataValidationHelper((XSSFSheet) sheet);
XSSFDataValidationConstraint mealdvConstraint = (XSSFDataValidationConstraint) mealdvHelper
.createExplicitListConstraint(itemsCategory);
// CellRangeAddressList(int firstRow, int lastRow, int firstCol, int lastCol)
CellRangeAddressList addressListmeal = new CellRangeAddressList(1, 99, i, i);
XSSFDataValidation categoryDataValidation = (XSSFDataValidation) mealdvHelper
.createValidation(mealdvConstraint, addressListmeal);
categoryDataValidation.setShowErrorBox(true);
categoryDataValidation.setSuppressDropDownArrow(true);
categoryDataValidation.setShowPromptBox(true);
sheet.addValidationData(categoryDataValidation);
} else if (i == 4) {
XSSFDataValidationHelper rmCategorydvHelper = new XSSFDataValidationHelper((XSSFSheet) sheet);
XSSFDataValidationConstraint rmCategorydvConstraint = (XSSFDataValidationConstraint) rmCategorydvHelper
.createExplicitListConstraint(itemsName);
CellRangeAddressList addressListrmCategory = new CellRangeAddressList(1, 99, i, i);
XSSFDataValidation itemNameValidation = (XSSFDataValidation) rmCategorydvHelper
.createValidation(rmCategorydvConstraint, addressListrmCategory);
itemNameValidation.setShowErrorBox(true);
itemNameValidation.setSuppressDropDownArrow(true);
itemNameValidation.setShowPromptBox(true);
sheet.addValidationData(itemNameValidation);
}
}
【问题讨论】:
标签: java excel apache-poi