使用layui+spingboot实现导入excel并插入到数据库中?如图。

 

用npoi exceljs也行

html代码

<button type="button" class="layui-btn" id="importFile" shiro:hasAnyRoles="root,resourceManager"><i class="layui-icon"></i>导入考勤模板</button>

js代码

layui.use(['upload'],function(){
var $ = layui.jquery,

upload = layui.upload;

//指定允许上传的文件类型
              upload.render({
                elem: '#importFile'
                ,url: port.getAttendanceListURL("import_attendance")
                ,accept: 'file' //普通文件
                ,exts: 'xlsx' //只允许上传压缩文件
                ,done: function(res){
                          if(res.code == 0){ //上传成功
                            layer.msg(res.msg);
                           
                          }else{
                              layer.msg('上传失败');
                          }
                          tabInst.reload();
                        }
                        ,error: function(index, upload){
                          layer.msg('上传失败');
                        }
              });        

 

});

Controller层代码

/**
     * 导入考勤模板
     * 
     * @param response
     * @return
     */
    @RequestMapping("/get/import_attendance")
    public String importTemplate(@RequestParam("file") MultipartFile file) {
        String str = "";
        Map<String, String> resObj = new HashMap<>();
        if (!file.isEmpty()) {
            try {
                String filename = file.getOriginalFilename();
                str = omsAttendanceService.importService(filename, file);
            } catch (IOException e) {
                logger.error("考勤查看的导入数据保存出错", e);
                resObj.put("msg", "error");
                resObj.put("code", "1");
                return JSONObject.toJSONString(resObj);
            }
            resObj.put("msg", str);
            resObj.put("code", "0");
            return JSONObject.toJSONString(resObj);
        } else {
            return null;
        }
    }

接口代码:

 @SuppressWarnings("resource")
    @Transactional(rollbackFor=Exception.class) 
    @Override
    public String importService(String filename, MultipartFile file) throws IOException {
        boolean isExcel2003 = true;
        String str = "";
        if (filename.matches("^.+\\.(?i)(xlsx)$")) {
            isExcel2003 = false;
        }
        InputStream is = file.getInputStream();
        Workbook wb = null;
        if (isExcel2003) {
            wb = new HSSFWorkbook(is);
        } else {
            wb = new XSSFWorkbook(is);
        }
        Sheet sheet = wb.getSheetAt(0);
        if (sheet != null) {
            str = "文件上传成功";
        } else {
            str = "上传失败sheet为空";
            return str;
        }
        for (int r = 1; r <= sheet.getLastRowNum(); r++) {
            Row row = sheet.getRow(r);
            if (row == null) {
                continue;
            }
            row.getCell(0).setCellType(Cell.CELL_TYPE_STRING);
            row.getCell(1).setCellType(Cell.CELL_TYPE_STRING);
            row.getCell(2).setCellType(Cell.CELL_TYPE_STRING);
            row.getCell(3).setCellType(Cell.CELL_TYPE_STRING);

            //从excel第二行开始获取每个单元格的数据

String vcName = row.getCell(0).getStringCellValue();

            String vcDate = row.getCell(1).getStringCellValue();
            String vcSignin = row.getCell(2).getStringCellValue();
            String vcLeave = row.getCell(3).getStringCellValue();

            ObjectName va = new ObjectName ();

            va.setVcName(vcName);
            va.setVcDate(DateUtils.getExcelToDate(Integer.parseInt(vcDate)));
            va.setVcSignin(vcSignin.trim().length()>0 ? DateUtils.getExcelToTime(Double.parseDouble(vcSignin)):"");
            
            va.setVcLeave(vcLeave.trim().length()>0 ? DateUtils.getExcelToTime(Double.parseDouble(vcLeave)):"");
            //保存
            ObjectName Mapper.save(va);
        }
        return str;
    }

注意:

DateUtils.getExcelToTime

这个方法写的excel日期数字转换的工具类2018-10-20

DateUtils.getExcelToTime

这方法写的excel时间数字转换的工具类08:23

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632