Excel引入多选下拉支持下拉项

栏目:云星瀚知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

Excel引入多选下拉支持下拉项

1. 因平台在EXCEL模版中只对单选下拉字段支持下拉项,多选下拉不支持,因此需要自行写代码支持。效果图如下:


2. 实现逻辑:在【引出数据(按引入模版)】操作时处理导出的EXCEL文件,对多选下拉字段进行下拉项处理。


3. 代码逻辑:

3.1读出多选下拉项的内容,因EXCEL的下拉只能单选,如多选下拉的项有 A,B,C三个项,则下拉项有【A】B】【C】【A,B】【A,C】【B,C】【A,B,C种情况。


3.2 将上述这7个值输出到EXCEL的指定位置(不影响模版的情况选可输出到比较靠后的列种)。如输出到AY3-AY9七个单元格中


3.3 找到多选下拉字段的位置,使用公式将列转换为多选下拉项。

//--读取下拉项的值,(下拉项的值写在Sheet1AY3-AY9位置

createFormulaListConstraint("INDIRECT("\"Sheet1!$AY$3:$AY$9\"")");

//--多选下拉字段在第3列,需要对第5-100行做下拉项,则代码如下:

CellRangeAddressList(5, 100,3,3);


4,完整代码如下


public void afterExportFile(ExportFileEvent e) {        

       File file = e.getFile();

       if(file != null) {

           try(FileInputStream fis = new FileInputStream(file)) {

               XSSFWorkbook workBook = new XSSFWorkbook(fis);

               XSSFSheet sheet = workBook.getSheetAt(0);                

               XSSFRow rowx1 = sheet.getRow(2);

               XSSFCell cell2 = rowx1.getCell(50);

               if(cell2==null) {

                   cell2=rowx1.createCell(50);

               }

               //--把下拉项的内容写到第50列的3-5行中

               String res0 ="A";

               String res1 ="B";

               String res2 ="A,B";

               cell2.setCellValue(res0);

               rowx1 = sheet.getRow(3);

               cell2 = rowx1.getCell(50);

               if(cell2==null) {

                   cell2=rowx1.createCell(50);

               }

               cell2.setCellValue(res1);

               rowx1 = sheet.getRow(4);

               cell2 = rowx1.getCell(50);

               if(cell2==null) {

                   cell2=rowx1.createCell(50);

               }

               cell2.setCellValue(res2);

               //找到多选下拉字段的位置(多选下拉字段标识为scope

               int cellindex = 0;

               int rowindex = 0;

               for (int i = 1; i < 20; i++) {

                   for (int j = 1; j < 4; j++) {

                       XSSFRow row = sheet.getRow(j);

                       XSSFCell cell = row.getCell(i);

                       if (cell != null) {

                           String val = cell.getStringCellValue();

                           if (val != null && "scope".equalsIgnoreCase(val.trim())) {

                               cellindex = i;

                               rowindex=j;

                               break;

                           }

                       }

                   }

                   if(cellindex>0) {

                       break;

                   }

               }

               if(cellindex>0) {

                   XSSFDataValidationHelper helper=new XSSFDataValidationHelper(sheet);        

                   String str="\""+sheet.getSheetName()+"!$AY$3:$AY$5\"";

                   XSSFDataValidationConstraint constitem=(XSSFDataValidationConstraint)helper.createFormulaListConstraint("INDIRECT("+str+")");

                   CellRangeAddressList cellRangeAddressList=new CellRangeAddressList(rowindex+2, 1000, cellindex,cellindex);                

                   DataValidation dValidation=helper.createValidation(constitem, cellRangeAddressList);

                   sheet.addValidationData(dValidation);

                   FileOutputStream out = new FileOutputStream(file);

                   workBook.write(out);

                   workBook.close();

                   out.close();

               }

           } catch (Exception exception) {

               logger.error("格式化引出的发生异常", exception);

           }

       }

   }

Excel引入多选下拉支持下拉项

1. 因平台在EXCEL模版中只对单选下拉字段支持下拉项,多选下拉不支持,因此需要自行写代码支持。效果图如下:2. 实现逻辑:在【引出数据...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息