<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;
    }

Excel 一键上传到数据库的更多相关文章

  1. 一个简单的excel文件上传到数据库方法

    因为以前项目中有用到过Excel导入,所以整理了一下,这是一个导入Excel数据到数据库的方法 注意:需要导入poi jar包 代码清单 /** * Excel 导入 * @param mapping ...

  2. 使用ocupload和POI一键上传Excel并解析导入数据库

    使用的工具如下:  JQuery ocupload jquery.ocupload-1.1.2.js Apache POI poi-3.9.jar 如果是Maven项目添加依赖如下: <depe ...

  3. 文件一键上传、汉字转拼音、excel文件上传下载功能模块的实现

    ----------------------------------------------------------------------------------------------[版权申明: ...

  4. IT轮子系列(六)——Excel上传与解析,一套代码解决所有Excel业务上传,你Get到了吗

    前言 在日常开发当中,excel的上传与解析是很常见的.根据业务不同,解析的数据模型也都不一样.不同的数据模型也就需要不同的校验逻辑,这往往需要写多套的代码进行字段的检验,如必填项,数据格式.为了避免 ...

  5. Python 一键上传下载&一键提交文件到SVN入基线工具

    一键上传下载&一键提交文件到SVN入基线工具   by:授客 QQ:1033553122 实现功能 1 测试环境 1 使用说明 1   注: 根据我司项目规则订制的一套工具,集成以下功能,源码 ...

  6. HTML中简单实现文件的一键上传的操作

    在html中实现文件上传的方式为form表单中使用input type="file"控件,但是这个控件往往显示不是美观,影响页面效果,这时候,一般就通过一键上传的操作,来实现点击一 ...

  7. jQuery OCUpload ——> 一键上传插件

    OCUpload为jQuery的插件(One Click Upload),意思为一键上传,封装了对于文件上传的一些方法,只需几行代码,文件上传优雅而简洁.      对于传统的文件上传,只是通过inp ...

  8. [SAP ABAP开发技术总结]客户端文本文件、Excel文件上传下载

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. [SAP ABAP开发技术总结]文本文件、Excel文件上传下传

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

随机推荐

  1. NetCore WebSocket 即时通讯示例

    1.新建Netcore Web项目 2.创建简易通讯协议 public class MsgTemplate { public string SenderID { get; set; } public ...

  2. 学习mysql语法--基础篇(一)

      前  言  mysql  mysql语法--本篇学习都是通过使用Navicat Premium(数据库管理工具),连接mysql数据. 本篇学习主要有两个部分:    一.创建用户,创建数据库,给 ...

  3. html中p标签行间距的问题

    使用CSS行高样式line-height可以设置调整p行间距,但是同时会影响每行文字间的上下间距,所以使用line-height虽然可以用来设置html p 行距离间隔,但是不是很实用,一般line- ...

  4. Administrator账户密码忘了怎么办

    WIN7的Administrator账户密码忘了怎么办   1.准备一个带有winpe系统的系统光盘或者U盘 2.启动电脑,按F12选择U盘或者光盘启动,进入winpe操作系统 3.找到c:\wind ...

  5. Java 9 揭秘(6. 封装模块)

    Tips 做一个终身学习的人. 在这章节中, 主要介绍以下内容: 封装Java模块的不同格式 JAR格式增强 什么是多版本JAR 如何创建和使用多版本JAR JMOD是什么格式 如何使用jmod工具来 ...

  6. c#中的委托和c++中的bind/function对比

    在c++中,如果要实现这样一个功能,比如定时器,在指定的时间执行指定的函数,接口可以采用如下的设计 uint64_t addtimer(uint64_t t, std::function<voi ...

  7. 5.如何修改maven本地仓库

    首先测试机子上时候安装上maven,步骤是win+r-->cmd-->mvn -v-->看其是否出现如下字样:   如果时间长了你忘记了你安装的maven目录或者jdk目录,那么下面 ...

  8. kbengine所有的demo源代码

    回复才可见的内容https://github.com/kbengine/kbengine_ue4_demo回复才可见的内容https://github.com/kbengine/kbengine_og ...

  9. 游戏UI框架设计(7): 资源国际化技术

    游戏UI框架设计(7) --资源国际化技术 说起"资源国际化"技术,个人认为可以追述到微软Window2000 PC操作系统的发布,在这之前windows98操作系统的开发都是先由 ...

  10. 详解Linux chgrp和chown命令的用法

    Linux chgrp和chown命令是管理员的常用命令,对于初学Linux系统管理的人来说,这对Linux chgrp和chown命令具体的用法这里做一介绍. Linux chgrp命令 功能:改变 ...