package com.finance.system.handler; import com.alibaba.excel.write.handler.SheetWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder; import java.util.Map; import lombok.Data; import org.apache.poi.ss.usermodel.DataValidation; import org.apache.poi.ss.usermodel.DataValidationConstraint; import org.apache.poi.ss.usermodel.DataValidationHelper; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.xssf.usermodel.XSSFDataValidation; @Data public class SelectedSheetWriteHandler implements SheetWriteHandler { private Map selectedMap; private int rows; public SelectedSheetWriteHandler(Map selectedMap, int rows) { this.selectedMap = selectedMap; this.rows = rows; } @Override public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) { //获取sheet页 Sheet sheet = writeSheetHolder.getSheet(); int firstRow = writeSheetHolder.getHead().get(0).size() + 1; int lastRow = writeSheetHolder.getHead().get(0).size() + rows; ///开始设置下拉框 DataValidationHelper helper = sheet.getDataValidationHelper(); for (Map.Entry entry : selectedMap.entrySet()) { /***起始行、终止行、起始列、终止列**/ CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, entry.getKey(), entry.getKey()); /***设置下拉框数据**/ DataValidationConstraint constraint = helper.createExplicitListConstraint( entry.getValue()); DataValidation dataValidation = helper.createValidation(constraint, addressList); /***处理Excel兼容性问题**/ if (dataValidation instanceof XSSFDataValidation) { dataValidation.setSuppressDropDownArrow(true); dataValidation.setShowErrorBox(true); } else { dataValidation.setSuppressDropDownArrow(false); } sheet.addValidationData(dataValidation); } } }