자바 범 형 및 반사 기반 엑셀 가 져 오기

8423 단어 Java
1. 데이터 이전, 저장량 백업 등 기능 은 Excel 에서 대량으로 가 져 옵 니 다.만약 모든 excel 에 대해 상응하는 POI 해석 을 하고 javabean 의 set 방법 을 호출 하여 사례 를 생 성 한다 면 의심 할 여지없이 대량의 작업량 을 낭비 할 것 이다.
이 글 은 자바 범 형 과 반사 기술 을 바탕 으로 POI 를 봉인 하고 excel 에 대한 해석 을 통 해 javabean 을 생 성 한다.SpringBoot TDD 만 들 기
Maven Dependency

    org.springframework.boot
    spring-boot-starter-parent
    2.0.3.RELEASE


        org.springframework.boot
        spring-boot-starter            
    

    
        org.springframework.boot
        spring-boot-autoconfigure          
    

    
        junit
        junit
        test
    
    
        cn.afterturn
        easypoi-base
        3.0.3
    
    
        cn.afterturn
        easypoi-web
        3.0.3
    
    
        cn.afterturn
        easypoi-annotation
        3.0.3
    

직접 코드 만 들 기
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Type; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@SuppressWarnings(“hiding”) public class ExcelUtil2 {
private Workbook workbook;

public List importExcel(String sheetName, File f, Class item) {
    List list = null;

    try {
        if(f.getName().endsWith("xlsx")){
            workbook = new XSSFWorkbook(new FileInputStream(f));
        }else{
            workbook = new HSSFWorkbook(new FileInputStream(f));
        }
        Sheet sheet = workbook.getSheet(sheetName);
        if (!"".equals(sheetName.trim())) {
            sheet = workbook.getSheet(sheetName);//     sheet ,    sheet    .
        }
        if (sheet == null) {
            sheet = workbook.getSheetAt(0); //      sheet          1 sheet.
        }

        //     
        list = dispatch(sheet, item);

    } catch (IOException e) {
        e.printStackTrace();
    }

    return list;
}

/**        List 
 *          ,             ,  Entity.class
 * 
 */
public List dispatch(Sheet sheet, Class clazz) {
    List instances = new ArrayList<>();

    List> sheetValue = parseExcelSheet(sheet);

    for (int i = 0; i < sheetValue.size(); i++) {
        Map map = sheetValue.get(i);
        Field[] fields = clazz.getDeclaredFields();

        try {
            T t2 = clazz.newInstance();
            for (Field field : fields) {
                field.setAccessible(true);
                Type type = field.getType();
                field.set(t2, getTypeValue(map.get(field.getName()), type.getTypeName()));
            }
            instances.add(t2);
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }
    return instances;
}

//      
public Object getTypeValue(String value, String type) {
    Object obj = new Object();
    if ("int".equals(type) || type.indexOf("Integer") > -1) {
        obj = Integer.valueOf(value);
    } else if ("short".equals(type) || type.indexOf("Short") > -1) {
        obj = Short.valueOf(value);
    } else if ("long".equals(type) || type.indexOf("Long") > -1) {
        obj = Long.valueOf(value);
    } else if ("float".equals(type) || type.indexOf("Float") > -1) {
        obj = Float.valueOf(value);
    } else if ("double".equals(type) || type.indexOf("Double") > -1) {
        obj = Double.valueOf(value);
    } else if ("boolean".equals(type) || type.indexOf("Boolean") > -1) {
        obj = Boolean.valueOf(value);
    } else {
        obj = value;
    }
    return obj;
}
/**
 *   Excel   ,          key,      value map
 *   : excel    
 * id   alarm
    1   abcd1
    2   abcd2
    3   abcd3
      List       
    List: map1( id: 1, alarm: abcd1 ),map2(( id: 2, alarm: abcd2 ).....
 */
public List> parseExcelSheet(Sheet sheet) {
    List> result = new ArrayList<>();
    Map rowValue = null;
    int rows = sheet.getPhysicalNumberOfRows();
    String[] headers = getHeaderValue(sheet.getRow(0));

    for (int i = 1; i < rows; i++) {
        rowValue = new HashMap<>();
        Row row = sheet.getRow(i);
        for (int kk = 0; kk < headers.length; kk++) {
            rowValue.put(headers[kk], String.valueOf(getCellValue(row.getCell(kk))));
        }
        result.add(rowValue);
    }
    return result;
}

/**      ,  ,         ,     ,    ,     ,        ,              **/
private String[] getHeaderValue(Row rowHeader) {
    int colNum = rowHeader.getPhysicalNumberOfCells();
    String[] headValue = new String[rowHeader.getPhysicalNumberOfCells()];
    for (int i = 0; i < colNum; i++) {
        headValue[i] = rowHeader.getCell(i).getStringCellValue();
    }
    return headValue;
}

@SuppressWarnings("deprecation")
public Object getCellValue(Cell cell) {
    Object value = null;
    switch (cell.getCellType()) {
    case Cell.CELL_TYPE_NUMERIC: //   
        //           
        if (DateUtil.isCellDateFormatted(cell)) {
            //  :format   yyyy-MM-dd hh:mm:ss
            //     12   ,  24   ,   h  H  ,yyyy-MM-dd HH:mm:ss
            SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss");
            value = sdf.format( DateUtil.getJavaDate(cell.getNumericCellValue())).toString();
            break;
        } else {
            value = new DecimalFormat("0").format(cell.getNumericCellValue());
        }
        break;
    case Cell.CELL_TYPE_STRING: //    
        value = cell.getStringCellValue();
        break;
    case Cell.CELL_TYPE_BOOLEAN: // Boolean
        value = cell.getBooleanCellValue() + "";
        break;
    case Cell.CELL_TYPE_FORMULA: //   
        value = cell.getCellFormula() + "";
        break;
    case Cell.CELL_TYPE_BLANK: //   
        value = "";
        break;
    case Cell.CELL_TYPE_ERROR: //   
        value = "    ";
        break;
    default:
        value = "    ";
        break;
    }
    return value;
}

}
실체 클래스 public class Alarm implements Serializable {
/**  */
private int id;
/**  */
private String alarm;


/** 
 *      
 */ 
public int getId() {
    return id;
}

/** 
 *      
 */
public void setId(int id) {
    this.id = id;
}

/** 
 *    
 */ 
public String getAlarm() {
    return alarm;
}

/** 
 *    
 */
public void setAlarm(String alarm) {
    this.alarm = alarm;
}

@Override
public String toString() {
    return "Alarm [id=" + id + ", alarm=" + alarm + "]";
}

}
테스트 코드
@Test
public void testImport() {

    ExcelUtil2 excelUtil = new ExcelUtil2<>() ;
    //"alarm" excel   sheet  ,     ,        
    List acfForms = excelUtil.importExcel("alarm",   new File(path)  , Alarm.class);

    for (Alarm a : acfForms) {
        System.out.println(a.toString());
    }

}

표 id alarm 1 abcd 1 2 abcd 2 3 abcd 3 4 abcd 4 5 abcd 5 6 abcd 6 7 abcd 7

좋은 웹페이지 즐겨찾기