1. 程式人生 > 實用技巧 >Excel表格上傳(layui+SSM)

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