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);
}
}