package com.monkeylessey.excel; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.write.handler.CellWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.write.metadata.holder.WriteTableHolder; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; import java.util.List; /** * excel下拉框 处理器 * @example * * EasyExcel.write(response.getOutputStream(), QuestionImportVO.class) * .sheet("模板") * .registerWriteHandler(new SelectExcel(subjectNameList)) * .registerWriteHandler(new FixedMergeCellStrategy(2, 4, Arrays.asList(1, 2, 3, 6, 7, 8, 9))) * .doWrite(data); * * * @author:xp * @date:2024/3/15 17:27 */ public class ExcelSelectHandler implements CellWriteHandler { /** * 题目类型 */ private String[] questionTypeList = {"单选题", "多选题", "判断题"}; /** * 课目 */ private List subjectNameList; /** * 选项下拉数据 */ private String[] optionList = {"A","B","C","D","E","F","G","H"}; public ExcelSelectHandler(List subjectNameList) { this.subjectNameList = subjectNameList; } @Override public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { // 获取sheet对象 Sheet sheet = writeSheetHolder.getSheet(); // 获取数据校验helper,excel的下拉就是通过数据校验设置 DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper(); // 设置题目下拉范围,第一列,1500行内 CellRangeAddressList questionTypeRange = new CellRangeAddressList(1, 1500, 0, 0); // 添加题目下拉 DataValidationConstraint questionConstraint = dataValidationHelper.createExplicitListConstraint(questionTypeList); DataValidation questionValidation = dataValidationHelper.createValidation(questionConstraint, questionTypeRange); sheet.addValidationData(questionValidation); // 设置课目下拉范围,第2列,1500行内 CellRangeAddressList subjectTypeRange = new CellRangeAddressList(1, 1500, 1, 1); // 添加课目下拉 DataValidationConstraint subjectConstraint = dataValidationHelper.createExplicitListConstraint(subjectNameList.toArray((new String[0]))); DataValidation subjectValidation = dataValidationHelper.createValidation(subjectConstraint, subjectTypeRange); sheet.addValidationData(subjectValidation); // 设置选项下拉范围,第4列,1500行内 CellRangeAddressList optionRange = new CellRangeAddressList(2, 1500, 3, 3); // 添加选项下拉 DataValidationConstraint optionConstraint = dataValidationHelper.createExplicitListConstraint(optionList); DataValidation optionValidation = dataValidationHelper.createValidation(optionConstraint, optionRange); sheet.addValidationData(optionValidation); // 设置选项下拉范围,第4列,1500行内 CellRangeAddressList answerRange = new CellRangeAddressList(2, 1500, 5, 5); // 添加选项下拉 DataValidationConstraint answerConstraint = dataValidationHelper.createExplicitListConstraint(optionList); DataValidation answerValidation = dataValidationHelper.createValidation(answerConstraint, answerRange); sheet.addValidationData(answerValidation); } }