Search in sources :

Example 1 with CustomMerge

use of com.macro.mall.tiny.anno.CustomMerge in project mall-learning by macrozheng.

the class CustomMergeStrategy method lazyInit.

/**
 * 初始化主键下标和需要合并字段的下标
 */
private void lazyInit(WriteSheetHolder writeSheetHolder) {
    // 获取当前sheet
    Sheet sheet = writeSheetHolder.getSheet();
    // 获取标题行
    Row titleRow = sheet.getRow(0);
    // 获取DTO的类型
    Class<?> eleType = this.elementType;
    // 获取DTO所有的属性
    Field[] fields = eleType.getDeclaredFields();
    // 遍历所有的字段,因为是基于DTO的字段来构建excel,所以字段数 >= excel的列数
    for (Field theField : fields) {
        // 获取@ExcelProperty注解,用于获取该字段对应在excel中的列的下标
        ExcelProperty easyExcelAnno = theField.getAnnotation(ExcelProperty.class);
        // 为空,则表示该字段不需要导入到excel,直接处理下一个字段
        if (null == easyExcelAnno) {
            continue;
        }
        // 获取自定义的注解,用于合并单元格
        CustomMerge customMerge = theField.getAnnotation(CustomMerge.class);
        // 没有@CustomMerge注解的默认不合并
        if (null == customMerge) {
            continue;
        }
        for (int index = 0; index < fields.length; index++) {
            Cell theCell = titleRow.getCell(index);
            // 当配置为不需要导出时,返回的为null,这里作一下判断,防止NPE
            if (null == theCell) {
                continue;
            }
            // 将字段和excel的表头匹配上
            if (easyExcelAnno.value()[0].equalsIgnoreCase(theCell.getStringCellValue())) {
                if (customMerge.isPk()) {
                    pkIndex = index;
                }
                if (customMerge.needMerge()) {
                    needMergeColumnIndex.add(index);
                }
            }
        }
    }
    // 没有指定主键,则异常
    if (null == this.pkIndex) {
        throw new IllegalStateException("使用@CustomMerge注解必须指定主键");
    }
}
Also used : Field(java.lang.reflect.Field) ExcelProperty(com.alibaba.excel.annotation.ExcelProperty) CustomMerge(com.macro.mall.tiny.anno.CustomMerge) Row(org.apache.poi.ss.usermodel.Row) Sheet(org.apache.poi.ss.usermodel.Sheet) Cell(org.apache.poi.ss.usermodel.Cell)

Aggregations

ExcelProperty (com.alibaba.excel.annotation.ExcelProperty)1 CustomMerge (com.macro.mall.tiny.anno.CustomMerge)1 Field (java.lang.reflect.Field)1 Cell (org.apache.poi.ss.usermodel.Cell)1 Row (org.apache.poi.ss.usermodel.Row)1 Sheet (org.apache.poi.ss.usermodel.Sheet)1