|
|
@@ -141,12 +141,13 @@ public class CustomRowWriteHandler implements RowWriteHandler {
|
|
|
}
|
|
|
|
|
|
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
|
|
|
- // 第一级设置DataValidation
|
|
|
- DataValidationConstraint firstConstraint = dvHelper.createExplicitListConstraint(new ArrayList<String>(cascadeSelectSource.keySet()).toArray(new String[CollectionUtil.size(cascadeSelectSource)]));
|
|
|
- CellRangeAddressList firstRangeAddressList = new CellRangeAddressList(1, ExcelConstant.MAX_ROW, cascadeParentIndex , cascadeParentIndex );
|
|
|
- DataValidation firstDataValidation = dvHelper.createValidation(firstConstraint, firstRangeAddressList);
|
|
|
- firstDataValidation.setSuppressDropDownArrow(true);
|
|
|
- sheet.addValidationData(firstDataValidation);
|
|
|
+// // 第一级设置DataValidation
|
|
|
+// DataValidationConstraint firstConstraint = dvHelper.createExplicitListConstraint(new ArrayList<String>(cascadeSelectSource.keySet()).toArray(new String[CollectionUtil.size(cascadeSelectSource)]));
|
|
|
+// CellRangeAddressList firstRangeAddressList = new CellRangeAddressList(1, ExcelConstant.MAX_ROW, cascadeParentIndex , cascadeParentIndex );
|
|
|
+// DataValidation firstDataValidation = dvHelper.createValidation(firstConstraint, firstRangeAddressList);
|
|
|
+// firstDataValidation.setSuppressDropDownArrow(true);
|
|
|
+// sheet.addValidationData(firstDataValidation);
|
|
|
+ createDropDownList(sheet,workbook,"hidden"+node.getFieldName(),cascadeParentIndex,new ArrayList<>(cascadeSelectSource.keySet()));
|
|
|
|
|
|
if(StrUtil.isBlank(node.getSubordinateFieldName())){
|
|
|
return;
|
|
|
@@ -156,9 +157,7 @@ public class CustomRowWriteHandler implements RowWriteHandler {
|
|
|
return;
|
|
|
}
|
|
|
// 剩下的层级设置DataValidation
|
|
|
- char[] offset = new char[1];
|
|
|
- offset[0] = (char) ('A' + cascadeChildIndex - 1);
|
|
|
- String formulaString = buildFormulaString(new String(offset), 2);
|
|
|
+ String formulaString = buildFormulaString(Hex26.toHex26(cascadeChildIndex), 2);
|
|
|
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createFormulaListConstraint(formulaString);
|
|
|
CellRangeAddressList regions = new CellRangeAddressList(1, ExcelConstant.MAX_ROW,cascadeChildIndex, cascadeChildIndex);
|
|
|
XSSFDataValidation dataValidationList = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, regions);
|
|
|
@@ -166,6 +165,41 @@ public class CustomRowWriteHandler implements RowWriteHandler {
|
|
|
sheet.addValidationData(dataValidationList);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 创建下拉列表
|
|
|
+ * @param workbook
|
|
|
+ * @param column
|
|
|
+ */
|
|
|
+ private void createDropDownList(Sheet sheet,Workbook workbook,String sheetName,Integer column,List<String> values){
|
|
|
+ if(CollectionUtil.isEmpty(values)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ DataValidationHelper helper = sheet.getDataValidationHelper();
|
|
|
+ Sheet hiddenSheet = workbook.createSheet(sheetName);
|
|
|
+ Name name = workbook.createName();
|
|
|
+ name.setNameName(sheetName);
|
|
|
+ CellRangeAddressList regions = createColumnCellRange(column);
|
|
|
+ for (int i = 0; i < values.size(); i++) {
|
|
|
+ Row row = hiddenSheet.getRow(i);
|
|
|
+ if(row==null){
|
|
|
+ row=hiddenSheet.createRow(i);
|
|
|
+ }
|
|
|
+ row.createCell(0).setCellValue(CollectionUtil.get(values,i));
|
|
|
+ }
|
|
|
+ String refers= sheetName + "!$A$1:$A$"+ CollectionUtil.size(values);
|
|
|
+
|
|
|
+ XSSFDataValidationConstraint constraint = new XSSFDataValidationConstraint(DataValidationConstraint.ValidationType.LIST, refers);
|
|
|
+ // 数据有效性对象
|
|
|
+ DataValidationHelper hiddenHelper = hiddenSheet.getDataValidationHelper();
|
|
|
+ DataValidation validation = hiddenHelper.createValidation(constraint, regions);
|
|
|
+ sheet.addValidationData(validation);
|
|
|
+
|
|
|
+ validation.setSuppressDropDownArrow(true);
|
|
|
+ int sheetIndex = workbook.getSheetIndex(hiddenSheet);
|
|
|
+ workbook.setSheetHidden(sheetIndex,true);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
private String buildRange(int offset, int startRow, int rowCount) {
|
|
|
String start = Hex26.toHex26(offset+1);
|
|
|
return "$" + start + "$" + startRow + ":$" + start + "$" + (startRow + rowCount - 1);
|