excl批量导入数据,后台共用解析方法,只要excl中的内容,能够对应到实体对象类中就可以用此方法。
简单例子可以点击这里,excl批量导入数据,后台使用java语言解析前台都是传递文件(这里只演示传递一个文件的情况),Java后台代码,
//这里因为每个实体对应的属性(也就是字段名不一致),所以要将此属性传递给方法,还有该实体对象,这里因为有一些特殊字符,我也是进行特殊处理,
/*
* 返回集合对象,所有导入功能调用此方法
* @param sheet,读取的sheet页
* @param ie,ie为ImportExcel
* @param listStr,是按顺序排序的的所有属性的name值(顺序同excl表格的字段)
* @param str,是需要截取的数据集合数组"-"
* @param t,为实体对象
* @return List<T>,实体集合
*/
public static <T> List<T> expFile(Sheet sheet,ImportExcel ie,String[] listStr,String[] str,T t){
List<T> list_T = new ArrayList<T>();
ie.setSheet(sheet);
//1、得到总行数、总列数(ie.getHeaderNum())
int rowNum = sheet.getLastRowNum();
//2、从第三行开始读取数据
if(listStr!=null && listStr.length>0){
for(int i =2; i<rowNum; i++){
try{
Row row = sheet.getRow(i);
T t2 = (T)t.getClass().newInstance();
for(int j=0; j<listStr.length; j++){
String ss = ie.getCellValue(row,j);
if(ss!=null && !"".equals(ss)){
if(isHaveN(listStr[j],str)){//true说明需要截取
t2 = SetTValue(t2,ss,listStr[j],"1");//需要截取“-”之前
}else{
t2 = SetTValue(t2,ss,listStr[j],"0");//t为当前对象,不需要截取
}
}
}
list_T.add(t2);
}catch(Exception e){
e.printStackTrace();
continue;
}
}
}
return list_T;
}
//判断str是否在st数组中
public static Boolean isHaveN(String str,String[] st){
try{
for(String string :st){
if(str!=null && string.equals(str)){
return true;
}
}
}catch(Exception e){
return false;
}
}
//给对象赋值,所有导入只需要传递相应参数,就可以赋值为对应属性
//t,为对象,str,要赋予的值,name 赋予的属性名,type是类型
public static <T> T SetTValue(T t,String str,String name,String type){
SimpleDataFormat sFmat = new SimpleDataFormat("yyyy-MM-dd HH:mm:ss");
Class<? extends Object> c = t.getClass();
//原先想法是,得到该对象的所有属性值,在进行一步判断,属性值是否存在,后续去掉了此判断
//Field[] field = t.getClass().getDeclaredFields();//该类所有属性值
//之后再for循环field去判断name是否跟其中的getName()相等;相等了进行赋值
try{
if("1".equqls(type)){
str = formatDicparam(str);
}
Field[] field = c.getDeclaredFields();//该类所有属性值
field.setAccessible(true);
String nameUf = name.substring(0,1).toUpperCase()+name.substring(1);
if(field.getGenericType().toString().equals("class java.lang.String")){
Method md = t.getClass().getMethod("set"+nameUf,String.class);
md.invoke(t,str);
}else if(field.getGenericType().toString().equals("class java.lang.Integer")){
Method md = t.getClass().getMethod("set"+nameUf,Integer.class);
md.invoke(t,Integer.parseInt(str));
}else if(field.getGenericType().toString().equals("class java.lang.Boolean")){
Method md = t.getClass().getMethod("set"+nameUf,Boolean.class);
md.invoke(t,Boolean.parseBoolean(str));//str为“true”时为true,其余为false
}else if(field.getGenericType().toString().equals("class java.lang.BigDecimal")){
Method md = t.getClass().getMethod("set"+nameUf,BigDecimal.class);
md.invoke(t,new BigDecimal(str));
}else if(field.getGenericType().toString().equals("class java.util.Date")){
Method md = t.getClass().getMethod("set"+nameUf,Date.class);
md.invoke(t,sFmat.parse(str));
}else if(field.getGenericType().toString().equals("class java.lang.Short")){
Method md = t.getClass().getMethod("set"+nameUf,Short.class);
md.invoke(t,Short.parseShort(str));
}else if(field.getGenericType().toString().equals("class java.lang.Long")){
Method md = t.getClass().getMethod("set"+nameUf,Long.class);
md.invoke(t,Long.parseLong(str));
}else if(field.getGenericType().toString().equals("class java.lang.Byte")){
Method md = t.getClass().getMethod("set"+nameUf,Byte.class);
md.invoke(t,Byte.parseByte(str));
}
}catch(NoSuchFieldException | SercurityException e){
log.error("属性不存在",name);
}catch(Exception e){
log.error("赋值出错",name);
}
return t;
}
public static String formatDicparam(Object cellValue){
if(cellValue!=null && !"".equals(cellValue)){
String str = cellValue.toString();
if(str.indexOf("-")!=-1){
return str.substring(0,str.indexOf("-"));
}
return str;
}
return "";
}