<a class="edit" id="batchImport"> 批量导入 </a>

js代码弹窗:

$("#batchImport").click(function(){

//弹窗弹窗下列内容 var html='<form id="execlForm" method="post" enctype="multipart/form-data">'; html+='<input type="file" name="file" id="execlFile" accept="application/vnd.ms-excel"/>'; html+='</form>'; layer.confirm(html, { btn: ['导入','取消'] ,//按钮 title:'导入测试者' }, function(){ var file = $("#execlFile").val(); console.info(file); var strFileName=file.replace(/^.+?\([^\]+?)(.[^.\]*?)?$/gi,"$1"); //正则表达式获取文件名,不带后缀 var fileName=file.replace(/.+./,""); if(fileName==''){ layer.msg('请选择上传文件!', {time:1000}); return false; }

                $.ajax({
                    url: '<%=path %>/front/conner/uploadExecl.do?',
                    type: 'POST',
                    cache: false,
                    data: new FormData($('#execlForm')[0]),
                    processData: false,
                    contentType: false
                }).done(function(res) {
                    console.info(res);
                    if(res=="true"){
                        layer.msg('上传成功', {time:1000});    
                        setTimeout(function(){
                              table.ajax.reload().draw(); 
                            },1500);
                    }else{
                        layer.msg('上传失败'+res+'条数据', {time:1000}); 
                        setTimeout(function(){
                              table.ajax.reload().draw(); 
                            },1500);
                    }
                    
                }).fail(function(res) {
                    //console.info(res);
                });
            });
    });    

controllor控制代码

/** * 批量导入测试者信息 * @param request * @param response * @param bankName */ @RequestMapping("uploadExecl") public void uploadBillFile(HttpServletRequest request, HttpServletResponse response){ // TODO 设置 咨询师编号 获取session里 Map map = sessionContext.get("frontUserInfo"); String counselorId = (String) map.get("ID");//获取咨询师的id

    //list集合接收读取excel文件
    List<MultipartFile> list = connerService.getMultipartFile(request);

    if(list.size()==0){
        out.out(response, "false");//表示未上传文件
    }else{
        String filename = list.get(0).getOriginalFilename();
        //判断读取到的文件是否是excel格式
        boolean flag = filename.endsWith(".xls");
        if(flag){
            try {
                //判断正确则调用读取excel文件的函数
                out.out(response,  connerService.uploadBillFile(list.get(0),counselorId));
            } catch (Exception e) {
                e.printStackTrace();
                out.out(response, "false");
            }
        }else{
            out.out(response, "false");//上传的文件不是excel文件
        }
    }
}

//Service代码

/** * 获取上传批量导入测试者信息 * @param request * @return */ public List<MultipartFile> getMultipartFile(HttpServletRequest request) { List<MultipartFile> list = new ArrayList<MultipartFile>(); CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver( request.getSession().getServletContext()); // 判断 request 是否有文件上传,即多部分请求 if (multipartResolver.isMultipart(request)) { // 转换成多部分request MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; // 取得request中的所有文件名 Iterator<String> iter = multiRequest.getFileNames(); while (iter.hasNext()) { // 取得上传文件 MultipartFile file = multiRequest.getFile(iter.next()); list.add(file); }

    }
    return list;
}
/**
 * 读取excel文件的操作
 * @param billFile
 * @return
 * @throws Exception
 */
public String uploadBillFile(MultipartFile billFile,String counselorId) throws Exception {
    //创建集合
    List<List> tolList = new ArrayList<List>();
    InputStream is = billFile.getInputStream();
    //读取excel文件的工作区域
    jxl.Workbook workbook = jxl.Workbook.getWorkbook(is);
    //设置只获取excel文件的第一个工作区
    Sheet sheet = workbook.getSheet(0);
    //获取行
    int rows = sheet.getRows();
    //获取列
    int columns = sheet.getColumns();
    //外循环获取行
    for(int i = 1; i < rows; i++){
        
        List eveList = new ArrayList<String>();
        //定义布尔变量做标记
        boolean flag=true;
        //内循环列
        for(int j = 0 ; j < 14 ;j++){
            //cell是jxl里的类,在这里获取行和列
            Cell cell = sheet.getCell(j, i);
            String content = cell.getContents();
             //StringUtils.isBlank判断某字符串是否为空或长度为0或由空白符
            if(StringUtils.isBlank(content)){
                flag=false;
                //为假跳出
                break;
            }
            //为真添加到集合
            eveList.add(content);
            }
        //判断为true添加到集合
        if(flag){
            tolList.add(eveList);
        }
         
    }
    
    
    //读取excel文件,如果有错误返回一个异常信息
    List errorList = userInfoDao.saveBatchConner(tolList,counselorId) ;
    String result = "true";
     
     
    if(errorList.size() == 0){
    }else{
        result = ""+errorList.size();
    }
    return result;
}

Dao层代码

/** * 咨询师操作批量保存测试者,上传excel操作 * 说明:函数主要读取excel文件,保存实体 * @param tolList * @return */ public List saveBatchConner(List<List> toList,String counselorId) { //学号,姓名,性别,出生日期,民族,血型,qq,邮箱,独生子女,单亲,所在地区,职业,学历,备注,咨询师验证。 List<UserInfo> errorList=new ArrayList<UserInfo>(); //提取execl列数据到属性集合,循环excel的内容 for(int i=0,len=toList.size();i<len;i++){ //获取excel tolList.get(获取一行).get(一行中的第一列).toString() UserInfo userInfo = new UserInfo(); userInfo.setId(Uuid.getUuid());//获取不重复编号 userInfo.setCounselorId(counselorId); userInfo.setIsConner("1");//1表示是测试者 userInfo.setAccount(toList.get(i).get(0).toString());//获取第一行第一列 userInfo.setUserName(toList.get(i).get(1).toString());//循环第一行第二列 userInfo.setSex(toList.get(i).get(2).toString()); userInfo.setBirthday(toList.get(i).get(3).toString()); userInfo.setNation(toList.get(i).get(4).toString()); userInfo.setBloodGroup(toList.get(i).get(5).toString()); userInfo.setQq(toList.get(i).get(6).toString()); userInfo.setEmail(toList.get(i).get(7).toString()); userInfo.setIsTheOnlyChild(toList.get(i).get(8).toString());//独生 userInfo.setIsSingleParent(toList.get(i).get(9).toString());//单亲 userInfo.setArea(toList.get(i).get(10).toString());//地区 userInfo.setProfession(toList.get(i).get(11).toString());//职业 userInfo.setEnducationlBackground(toList.get(i).get(12).toString());//学历 userInfo.setRemark(toList.get(i).get(13).toString());//备注

         //保存到实体类
        String flag=saveEntity(userInfo);
         //如果有错误信息则返回一个集合
          if(!"true".equals(flag)){
              errorList.add(userInfo);
          }
    }
    return errorList;
}