Excel 一键上传到数据库

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

 

转载于:https://www.cnblogs.com/zhuyuewei/p/6518114.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL——实例记录(对查询结果排行号)

select 订单编号, DENSE_RANK() over(order by 订单编号) from test 排序结果&#xff1a; 55678-0-1 1 55678-0-1 1 33454-0-1 2 33454-0-1 2 33454-0-1 2 这种是按照订单不同的顺序依次往后排 当然也可以在 over后面加上你想要的起始号 例&#xff1a;DE…

TeamCity构建依赖项

介绍 构建依存关系的主题既不重要也不是次要的。 各种构建工具从不同的角度处理此主题&#xff0c;从而提供各种解决方案&#xff0c;每种解决方案都有其优点和缺点。 熟悉发行版和快照依赖项的Maven和Gradle用户可能不了解TeamCity快照依赖项&#xff0c;或者认为他们与Maven…

复选框操作checked选中为true,反之为False,也可以赋值为true,false

转载于:https://www.cnblogs.com/shiluoliming/p/6518236.html

java 个税计算_【JAVA300例】10、计算个人所得税

逻辑是这样的。每个等级计算的系数都不一样。分别有多个档位。要判断处于什么档位然后用特殊的公式去计算。原版是从小到大判断&#xff0c;每次写条件很烦。这里换成从大到小。节省敲代码时间。import java.util.Scanner;public class Test010{public static void main(String…

Java是否越来越接受静态导入?

曾经有一段时间&#xff0c;至少在礼貌的社会中&#xff0c;人们普遍认为使用“ 不是 ”一词是不可接受的。 确实&#xff0c;那时&#xff08;也许直到今天&#xff09;&#xff0c;许多人确实&#xff08;也确实&#xff09;认为不是一个真实的词。 尽管这个词并没有 引起争议…

Stream 工具方法

inputstream 转 string 1、使用字符流 InputStream is TestZhimaCustomerCertificationInitialize.class.getClassLoader().getResourceAsStream("config/rsa_private_key_pkcs8.pem"); InputStreamReader isr new InputStreamReader(is); BufferedReader br new…

从0开始学习 GitHub 系列汇总笔记

本文学习自Stromzhang, 原文地址请移步&#xff1a;从0开始学习 GitHub 系列汇总 我的笔记&#xff1a; 0x00 从0开始学习GitHub 系列之[初识GitHub] GitHub 影响力 a.全球顶级科技公司纷纷加入 GitHub &#xff0c;并贡献他们自己的项目代码 Google: https://github.com/goog…

Drools Guvnor –管理访问

外部化业务或技术规则对于可伸缩应用程序非常重要&#xff0c;但是应该管理BRMS服务访问。 guvnor使用基于角色的授权提供控件UI访问和操作。 在drools-guvnor参考手册中列出了几种权限类型。 具有所有权限的管理员。 分析师或只读分析师&#xff1a;特定类别的分析师权限。 软…

java文件操作和_JAVA文件操作类和文件夹的操作

JAVA文件操作类和文件夹的操作package com.gamvan.tools;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import jav…

CCNA基础知识摘录

cisco设备的启动要点&#xff1a;1、检测硬件(保存在rom)2、载入软件&#xff08;IOS&#xff09;&#xff08;保存在Flash&#xff09;3、调入配置文件&#xff08;密码&#xff0c;IP地址&#xff0c;路由协议都保存在此&#xff09;&#xff08;此文件保存在NVRAM&#xff0…

【VS开发】IP地址格式转换(htonl、ntohl;inet_addr、inet_ntoa)

1、htonl ()和ntohl( ) u_long PASCAL FAR ntohl (u_long netlong); u_short PASCAL FAR ntohs (u_short netshort); ntohl( )-----网络顺序转换成主机顺序 u_long PASCAL FAR htonl (u_long hostlong); u_short PASCAL FAR htons (u_short hostshort); htonl ()-----主机顺序转…

SOA示例应用程序

SOA描述了一组用于创建松散耦合的&#xff0c;基于标准的&#xff0c;与业务相关的服务的模式&#xff0c;由于描述&#xff0c;实现和绑定之间的关注点分离&#xff0c;因此提供了新的灵活性。 近年来&#xff0c;至少在参与大多数信息技术活动的人们中&#xff0c;面向服务的…

java 分贝_java11教程--jhsdb命令

您可以使用该jhsdb工具将Java进程或崩溃的Java虚拟机(JVM)的核心转储连接。概要jhsdb clhsdb [--pid pid | --exe executable --core coredump]jhsdb debugd [options] (pid | executable coredump) [server-id]jhsdb hsdb [--pid pid | --exe executable --core coredump]jhsd…

Oracle使用startup与startup force启动的区别

1. startup 就是正常启动数据库&#xff0c;没什么好说的。 2. startup force 是shutdown abort startup的组合&#xff0c;即强制关闭数据库 正常启动数据库&#xff0c;想快速重启数据库时胆子大的人用的。 startup force测试 在一个窗口执行startup force 命令 点击(此…

js点击button按钮跳转到页面代码

www.111cn.net 编辑:smoke 来源:转载在网页中button按钮不具备a标签的属性了&#xff0c;如果我们要给button 按钮增加跳转事件我们可以在它的确onclick事件上点击跳转js来实现&#xff0c;下面我来给大家介绍一些常用的方法。点击按钮怎么跳转到另外一个页面呢&#xff1f;我们…

Mac OS X上的Java Memcached

介绍 在本文中&#xff0c;我将解释如何&#xff1a; 在Mac OS X上安装和配置Memcached 在Java应用程序中使用Memcached 我不会过多地介绍在您的应用程序中使用分布式缓存的好处&#xff0c;但是至少让我们提供一些在企业门户&#xff08;在我的情况下为eXo平台&#xff09;…

Js实现内容向上无缝循环滚动

当前项目有一个类似公告向上滚动的需求&#xff0c;在网上搜索到一个比较棒的程序&#xff0c;现摘录如下&#xff1a; //document.getElementById()的最简化应用 function $(element) {if (arguments.length > 1) {for (var i 0, length arguments.length, elements [];…

Repeater 中TextBox 触发TextChanged事件

两种方法 1.TextBox 绑定TextChanged 并设置AutoPostBack "true" &#xff0c;如果不设置AutoPostBack "true"则不会触发TextChanged事件&#xff0c;然后在对应的方法里面循环Repeater查找改变项 部分代码 <ItemTemplate ><tr><td style &…

什么是Spring Integration?

随着Spring Integration项目逐渐获得越来越多的采用和兴趣&#xff0c;企业集成或企业开发领域的开发人员很可能会遇到它。 他们可能会发现它很有趣&#xff0c;但并没有完全理解它的含义&#xff0c;所要解决的问题&#xff0c;可以从中获取更多信息以及它在ESB和其他SOA基础结…

java jmap mat_java内存调优之jmap,jstack,mat

查看整个JVM内存状态jmap -heap [pid]要注意的是在使用CMS GC 情况下&#xff0c;jmap -heap的执行有可能会导致JAVA 进程挂起查看JVM堆中对象详细占用情况jmap -histo [pid]可以通过jmap -histo [pid] | head -20查看top20的实例个数以及内存占用情况导出整个JVM 中内存信息&a…