Excel表格上传(layui+SSM)

一、完成任务模块

  1. 超级管理员的试题管理模块

  2. 管理员的学生管理模块

  3.管理员的班级管理模块

二、核心代码:

Excel表格上传所需jar及配置文件

1. 在springmvc的配置文件中配置文件上传的相关配置:

2. 所需要的jar截图

 

 下载链接在文章最后。

3. 前端页面layui代码截图

 4. 封装的返回实体类

package com.hp.entity;

import java.io.Serializable;
import java.util.List;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * 自定义响应结构
 */
public class ResponseResult implements Serializable {

    // 定义jackson对象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    // 响应业务状态
    private Integer code;

    // 响应消息
    private String msg;

    // 响应中的数据
    private Object data;

    // 总数量
    private Integer count;

    public static ResponseResult build(Integer code, String msg, Object data) {
        return new ResponseResult(code, msg, data);
    }

    public static ResponseResult build(Integer code, String msg, Integer count, Object data) {
        return new ResponseResult(code, msg, count, data);
    }

    public static ResponseResult ok(Object data) {
        return new ResponseResult(data);
    }

    public static ResponseResult ok() {
        return new ResponseResult(null);
    }

    public ResponseResult() {

    }

    public static ResponseResult build(Integer code, String msg) {
        return new ResponseResult(code, msg, null);
    }

    public ResponseResult(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public ResponseResult(Integer code, String msg, Integer count, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
        this.count = count;
    }

    public ResponseResult(Object data) {
        this.code = 0;
        this.msg = "OK";
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Integer getCount() {
        return count;
    }

    public void setCount(Integer count) {
        this.count = count;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    /**
     * 将json结果集转化为TaotaoResult对象
     * 
     * @param jsonData json数据
     * @param clazz    TaotaoResult中的object类型
     * @return
     */
    public static ResponseResult formatToPojo(String jsonData, Class<?> clazz) {
        try {
            if (clazz == null) {
                return MAPPER.readValue(jsonData, ResponseResult.class);
            }
            JsonNode jsonNode = MAPPER.readTree(jsonData);
            JsonNode data = jsonNode.get("data");
            Object obj = null;
            if (clazz != null) {
                if (data.isObject()) {
                    obj = MAPPER.readValue(data.traverse(), clazz);
                } else if (data.isTextual()) {
                    obj = MAPPER.readValue(data.asText(), clazz);
                }
            }
            return build(jsonNode.get("code").intValue(), jsonNode.get("msg").asText(),
                    jsonNode.get("count").intValue(), obj);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * object对象的转化
     * 
     * @param json
     * @return
     */
    public static ResponseResult format(String json) {
        try {
            return MAPPER.readValue(json, ResponseResult.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * Object是集合转化
     * 
     * @param jsonData json数据
     * @param clazz    集合中的类型
     * @return
     */
    public static ResponseResult formatToList(String jsonData, Class<?> clazz) {
        try {
            JsonNode jsonNode = MAPPER.readTree(jsonData);
            JsonNode data = jsonNode.get("data");
            Object obj = null;
            if (data.isArray() && data.size() > 0) {
                obj = MAPPER.readValue(data.traverse(),
                        MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));
            }
            return build(jsonNode.get("code").intValue(), jsonNode.get("msg").asText(),
                    jsonNode.get("count").intValue(), obj);
        } catch (Exception e) {
            return null;
        }
    }

}

5. controller代码

//批量添加
    @RequestMapping("/excelItemBank")
    @ResponseBody
    public ResponseResult excelStudent(HttpServletRequest request) {

        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        MultipartFile file = multipartRequest.getFile("file");
        if (file.isEmpty()) {
            return ResponseResult.build(1, "文件不存在!");
        }
        String msg = itemBankService.ajaxUploadExcel(file);
        if (msg.equals("导入成功!")) {
            return ResponseResult.build(0, msg);
        } else {
            return ResponseResult.build(1, msg);
        }

    }

6. service代码

@Override
    public String ajaxUploadExcel(MultipartFile file) {
        // TODO Auto-generated method stub
        // 获取IO流
        InputStream in = null;
        try {
            in = file.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
            return "系统导入表格出错!";
        }

        // 获取IO流的数据
        List<List<Object>> listob = null;
        try {
            listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename());
        } catch (Exception e) {
            e.printStackTrace();
            return "系统获取表格内容出错!";
        }

        // 对表格内容进行初步检验,避免同一张表中,有些人注册了有些人没有,不能重新导入表格
        for (int i = 0; i < listob.size(); i++) {
            List<Object> lo = listob.get(i);
            

            // 对表格内容是否缺少,格式是否正确进行检查
            try {
                
                String.valueOf(lo.get(0));//科目
                String.valueOf(lo.get(1));//题目
                String.valueOf(lo.get(2));//选项A
                String.valueOf(lo.get(3));//选项B
                String.valueOf(lo.get(4));//选项C
                String.valueOf(lo.get(5));//选项D
                String.valueOf(lo.get(6));//类别
                String.valueOf(lo.get(7));//答案
                Integer.valueOf(String.valueOf(lo.get(8)));//难度
            } catch (Exception e) {
                return "表格内容有误,请重新导入表格!";
            }

            // 该处检查Excel中的賬戶名在数据库中是否已存在,如果已存在,直接return
            /*
             * j = managerDao.selectByName(String.valueOf(lo.get(0))); if (j != null) {
             * return "账户名" + String.valueOf(lo.get(0)) + "已存在"; }
             */
        }

        // 该处可调用service相应方法进行数据保存到数据库中,现只对数据输出
        for (int i = 0; i < listob.size(); i++) {
            List<Object> lo = listob.get(i);
            //根据校区名字查询对应实体
            Subject sub = subjectDao.selectByName(String.valueOf(lo.get(0)));
            ItemBank bank = new ItemBank();

            bank.setSubject(sub);
            bank.setTopic(String.valueOf(lo.get(1)));
            bank.setOptionA(String.valueOf(lo.get(2)));
            bank.setOptionB(String.valueOf(lo.get(3)));
            bank.setOptionC(String.valueOf(lo.get(4)));
            bank.setOptionD(String.valueOf(lo.get(5)));
            bank.setType(String.valueOf(lo.get(6)));
            bank.setAnswer(String.valueOf(lo.get(7)));
            bank.setDifficulty(Integer.valueOf(String.valueOf(lo.get(8))));
            //写入数据库
            itemBankDao.add(bank);
        }

        return "导入成功!";
    }

以上功能为表格上传,并将数据添加到数据库。

补充关于layui的几个问题:

1. 前端报错405 (method is not allowed),控制台报错提示Request method 'POST' not supported

原因:请求路径出现了问题。认真检查页面的请求路径。我就是路径少写一个字母。

2. layui在显示含有html标签的字符串时,无法直接显示

解决办法:

三、项目燃尽图更新如下:

源码资料链接:链接:https://pan.baidu.com/s/1e--85shv3VqYbqxOnLY_oA
提取码:uj5c

猜你喜欢

转载自www.cnblogs.com/wangpeng94/p/13372071.html
今日推荐