20171020java学习总结——execl 批量导入(2)

   //名称 viewdata()
    //读取excel表适用于单sheet数据低版本excel
    //data--读入的excel文件路径
    //lis--自定义的list保存值对应于页面相应字段需要顺序加入
    //index--数据标志位对应于业务数据起始行,第一行下标为0
    public static List<Map<String, String>> viewPre(String data,List<String> lis,int index) {
        List<Map<String,String>> prelist=new ArrayList<Map<String,String>>();
        try {
            int flag;
            InputStream is = new FileInputStream(data);
            jxl.Workbook rwb = Workbook.getWorkbook(is);
            Sheet[] rslist = rwb.getSheets();
            //获取行数
            int rows = rslist[0].getRows();
            if(index < rows){
                for (int j = index; j < rslist[0].getRows(); j++) {
                    Map<String, String> premap = new HashMap<String, String>();
                    //列数
                    int columnnum =rslist[0].getColumns();
                    String content;
                    //如果一行没有任何内容,则跳过
                    flag = 0;
                    premap.clear();
                    for( int t=0;t<columnnum;t++){
                        premap.put(lis.get(t), rslist[0].getCell(t,j).getContents().trim());//将excel值赋给数组
                        content = rslist[0].getCell(t,j).getContents().trim();
                        if(!"".equals(content)&&content != null){
                            flag=1;
                        }
                    }
                    if(flag==1){
                        prelist.add(premap);
                    }
                }
            }
            rwb.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return prelist;
    }
**
     * querySSXByRegionLength(这里用一句话描述这个方法的作用)
     * 
     * @Title: dealViewdata
     * @Description: 动态拼装日期等现在仅用于日期;多参传参形式必须成对出现为(...,int 1,list<String> lis)(1:代表格式化日期 ;lis代表所替换对应日期的列名)
     * (2:代表处理字典表;对应的传入参数为Map<String,String>其中键为字典表中的dicttypeid值为对应的字段值
     *         例如:map.put("dict_sex", "sex");)
     * (3:替换唯一情况字段传入类型;对应传入类型为Map<String,String> key为列名,value为表名)
     * (4:校验必填项是否为空传入类型为list<String> lis 其中String为校验的列名)
     * @Author:dsq
     * @return List<Map<String,String>> 返回类型
     */
        public static List<Map<String,String>> dealViewdata(List<Map<String,String>> lisMap,Map<String,String> mapflag,SqlMapper sqlMapper,Object... obj){
            for(int i=0; i<lisMap.size(); i++){
                for(int j=0;j<obj.length;j+=2){
                    switch ((int)obj[j]) {
                        //替换日期
                        case 1:
                            for(int t=0;t<((List<String>)obj[j+1]).size();t++){
                                if(null != lisMap.get(i).get(((List<String>)obj[j+1]).get(t)) && !"".equals(lisMap.get(i).get(((List<String>)obj[j+1]).get(t)))){
                                    if(RegExpValidatorUtils.isDate(lisMap.get(i).get(((List<String>)obj[j+1]).get(t)))){
                                        lisMap.get(i).put(((List<String>)obj[j+1]).get(t), StrUtil.dataformat(lisMap.get(i).get(((List<String>)obj[j+1]).get(t))));
                                    }else{
                                        lisMap.get(i).put(((List<String>)obj[j+1]).get(t), "1error");
                                        mapflag.put("flag", "1");
                                    }
                                }
                            }
                            break;
                        //替换字典表对应的数据
                        case 2:
                            for(String key : ((Map<String,String>)(obj[j+1])).keySet()){
                                String sql="select value from sys_dict where dicttypeid ='"+key+"' and item ='"+lisMap.get(i).get(((Map<String,String>)(obj[j+1])).get(key))+"'";
                                String value=sqlMapper.selectOne(sql,String.class);
                                lisMap.get(i).put(((Map<String,String>)(obj[j+1])).get(key), value);
                            }
                            break;
                            //校验数据库中是否存在该数据
                        case 3:
                            for(String key : ((Map<String,String>)(obj[j+1])).keySet()){
                                int count = 0;
                                String value = lisMap.get(i).get(key);
                                if(null != value && !"".equals(value)){
                                    count = StrUtil.compareData(sqlMapper, ((Map<String,String>)(obj[j+1])).get(key), key,value);
                                    if(count != 0){
                                        lisMap.get(i).put(key, "2error");
                                        mapflag.put("flag", "1");
                                    }
                                }
                            }
                            break;
                            //校验excel表中传入的数据不能为空
                        case 4:
                            for(int t=0;t<((List<String>)obj[j+1]).size();t++){
                                if("".equals(lisMap.get(i).get(((List<String>)obj[j+1]).get(t))) || null == lisMap.get(i).get(((List<String>)obj[j+1]).get(t))){
                                    lisMap.get(i).put(((List<String>)obj[j+1]).get(t),"3error");
                                    mapflag.put("flag", "1");
                                }
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
            return lisMap;
        }
//验证手机号码
		public static List<Map<String,String>> valiphone(List<Map<String,String>> lisMap,Map<String,String> mapflag,List<String> lis){
			for(int i=0;i<lisMap.size();i++ ){
				for(int t=0;t<lis.size();t++){
					if(null != lisMap.get(i).get(lis.get(t)) && !"".equals(lisMap.get(i).get(lis.get(t)))){
						if(!RegExpValidatorUtils.isPhone(lisMap.get(i).get(lis.get(t)))){
							lisMap.get(i).put((lis.get(t)), "8error");
							mapflag.put("flag", "1");
						}
					}
				}
			}
			return lisMap;
		}

  

//根据列名返回其字段值
	//name--对应的表名
	public static List<String> getColumnNameStr(SqlMapper sqlMapper,String name){
		return sqlMapper.selectList("SELECT column_name name FROM information_schema.columns WHERE table_schema = 'agripro' AND table_name ='"+name+"'", String.class);
	}

  

 //name--对应的表名
    //idList--向表中插入的对应的字段名
    //lis--要插入的数据Map内容顺序上无要求
    
    public static String spStr(String name,List<String> idlist,List<Map<String,String>> lis){
    	StringBuffer sbf = new StringBuffer();
    	sbf.append("INSERT into ");
    	sbf.append(name);
    	sbf.append(" (");
    	for(int i=0; i<idlist.size();i++){
    		sbf.append(idlist.get(i)+",");
    	}
    	sbf.deleteCharAt(sbf.length()-1);
    	sbf.append(") VALUES ");
    	
    	for(int i=0;i<lis.size();i++){
    		sbf.append(" ('");
    		for(int j=0;j<idlist.size();j++){
    			sbf.append(lis.get(i).get(idlist.get(j)));
    			sbf.append("','");
    		}
    		sbf.deleteCharAt(sbf.length()-1);
    		sbf.deleteCharAt(sbf.length()-1);
    		sbf.append("),");
    	}
    	sbf.deleteCharAt(sbf.length()-1);
    	sbf.append(";");
    	return sbf.toString();
    }

  

posted @ 2017-10-20 08:56  simplemtt  阅读(91)  评论(0)    收藏  举报