话不多说 看码
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.zjy.platform.supplier.param.device.DeviceTemplateImportDTO;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
/**
* <a> 代码千万行 注释第一行 编程不规范 同事两行泪 </a>
*
* @author Enzo
* @date 2024-05-15 15:33
* @description excel导出工具类
*/
@Slf4j
@Data
public class ExcelUtil {
/**
* 导出数据最大行数
*/
private static final int MAX_ROWS = 3000;
/**
* 数据页sheet名称
*/
private static final String DATA_SHEET_NAME = "dataSheet";
/**
* 标头
*/
private List<String> headersList;
/**
* 单选下拉框数据源
*/
private List<String> selectDropdownList;
/**
* 单选下拉框列 开始下标 从0开始
*/
private int singleChoiceColumnIndex;
/**
* 多级联动下拉数据源
*/
private Map<String, List<String>> multilevelDropDownDataSource;
/**
* 多级联动下拉框列 开始下标 从0开始
*/
private int multilevelDropDownStartColumn;
/**
* 多级联动数据源
*/
private int multilevelDropDownLevel;
public ExcelUtil() {
}
/**
* 生成只有标头的模板
*
* @param headersList 标头
*/
public ExcelUtil(List<String> headersList) {
this.headersList = headersList;
}
/**
* 生成标头 单选 模板
*
* @param headersList 标头
* @param selectDropdownList 单选数据源
* @param singleChoiceColumnIndex 单选开始列 从0计算
*/
public ExcelUtil(List<String> headersList, List<String> selectDropdownList, int singleChoiceColumnIndex) {
this.headersList = headersList;
this.selectDropdownList = selectDropdownList;
this.singleChoiceColumnIndex = singleChoiceColumnIndex;
}
/**
* 生成标头 多级联动下拉 模板
*
* @param headersList 标头
* @param multilevelDropDownDataSource 多级联动下拉 数据源
* @param multilevelDropDownStartColumn 多级联动下拉 开始列 从0计算
* @param multilevelDropDownLevel 多级联动下拉 层级
*/
public ExcelUtil(List<String> headersList, Map<String, List<String>> multilevelDropDownDataSource, int multilevelDropDownStartColumn,
int multilevelDropDownLevel) {
this.headersList = headersList;
this.multilevelDropDownDataSource = multilevelDropDownDataSource;
this.multilevelDropDownStartColumn = multilevelDropDownStartColumn;
this.multilevelDropDownLevel = multilevelDropDownLevel;
}
/**
* 生成标头 单选及多级联动下拉 模板
*
* @param headersList 标头
* @param selectDropdownList 单选数据源
* @param