package io.renren;
import com.alibaba.fastjson.JSONObject;
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;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class POITest {
public static void main(String[] args) {
// Class class = new TestDO().getClass();
TestDO t = new TestDO();
importUtils("F:\test1.xlsx",t);
}
public static T importUtils(String EXCEL_PATH, T t){
Map COLUMN_MAP = new HashMap<>();
File file = new File(EXCEL_PATH);
Workbook workbook = null;
try {
workbook = new XSSFWorkbook(file);
int numberOfSheets = workbook.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
if (i > 0) {
break;
}
Sheet sheet = workbook.getSheetAt(i);
int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
for (int j = 0; j < physicalNumberOfRows; j++) {
Row row = sheet.getRow(j);
if (row != null) {
int physicalNumberOfCells = row.getPhysicalNumberOfCells();
if (j == 0) {
for (int k = 0; k < physicalNumberOfCells; k++) {
// String cellValue = (String) ExcelUtil.getCellValue(row, k);
String cellValue = String.valueOf(row.getCell(k));
TestEnum shoppingDetailEnum = TestEnum.get(cellValue);
COLUMN_MAP.put(k, shoppingDetailEnum.getFieldName());
}
continue;// 标题行
}
// TestDO shoppingDetailEntity = new TestDO();
Field declaredField = null;
for (int k = 0; k < physicalNumberOfCells; k++) {
String fieldName = COLUMN_MAP.get(k);
try {
declaredField = t.getClass().getDeclaredField(fieldName);
} catch (NoSuchFieldException ex) {
// 子类不存在该变量则从父类获取变量
// declaredField = shoppingDetailEntity.getClass().getSuperclass().getDeclaredField(fieldName);
ex.printStackTrace();
}
Object cellValue = row.getCell(k);
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String setMethodName = "set" + firstLetter
+ fieldName.substring(1);
Method setMethod = t.getClass().getMethod(setMethodName,
new Class[] { declaredField.getType() });
switch (declaredField.getType().toString()){
case "float":
cellValue = Float.parseFloat(String.valueOf(cellValue));
break;
case "double":
cellValue = Double.parseDouble(String.valueOf(cellValue));
break;
case "int":
cellValue = Integer.parseInt(String.valueOf(cellValue));
break;
case "class java.lang.String":
cellValue = String.valueOf(cellValue);
break;
}
setMethod.invoke(t, new Object[] { cellValue });//调用对象的setXXX方法
}
// 开始插入数据
System.out.println(JSONObject.toJSonString(t));
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return t;
}
}
===================================================================
package io.renren;
import lombok.Data;
@Data
public class TestDO {
private String school;
private String name;
private int age;
private float hign;
private String sex;
}
==================================================================
package io.renren;
public enum TestEnum {
SCHOOL("学校", "school"),
NAME("姓名", "name"),
AGE("年龄", "age"),
HIGN("身高", "hign"),
SEX("性别", "sex");
private String columnName;
private String fieldName;
TestEnum(String columnName, String fieldName) {
this.columnName = columnName;
this.fieldName = fieldName;
}
public static TestEnum get(String columnName) {
TestEnum[] values = TestEnum.values();
for (TestEnum shoppingDetailEnum : values) {
if (shoppingDetailEnum.getColumnName().equals(columnName)) {
return shoppingDetailEnum;
}
}
return null;
}
public String getColumnName() {
return columnName;
}
public String getFieldName() {
return fieldName;
}
}



