layui导入excel

前端:

按钮:<a class="layui-btn layui-btn-sm layuiadmin-button-btn train-btn-css"id="uploadGuideExcel">Excel导入计划</a>
//
//导入计划upload.render({elem: '#uploadGuideExcel',
//修改为你的urlurl: domainName + '/trainingbase/importExcel', // 此处配置你自己的上传接口即可exts: 'xlsx',type: 'post',headers: {"Authorization": 'Bearer ' + localStorage.getItem("access_token")}, before: function (obj) { //obj参数包含的信息,跟 choose回调完全一致,可参见上文。layer.load(); //上传loading},error: function (index, upload) {layer.closeAll('loading'); //关闭loading}, done: function (res) {layer.closeAll('loading'); //关闭loadingif (res.code == 200) {myLayer.msg("上传成功");serchRef();} else {myLayer.Alert(res.msg);}}});

后端:

@PostMapping("/importExcel")public AjaxResult importExcel(MultipartFile file) throws IOException {UserVO userVO = userVOUtils.getUserVO(request);//校验权限,写自己的if(userVO != null && userVO.getTrainBaseList() != null){//培训基地是否只有一个if(userVO.getTrainBaseList().size() != 1){return AjaxResult.error("您的培训基地权限不唯一,无法上传");}}//培训基地id,没用可删String trainBaseid = userVO.getTrainBaseList().get(0);
//可以从这里开始//1. 加载数据ExcelReader reader = ExcelUtil.getReader(file.getInputStream());List<Map<String, Object>> mapList = reader.read(0, 1, reader.getRowCount() - 1);if(mapList==null || mapList.size()==0)return AjaxResult.error("导入数据不能为空");//2.校验数据列是否正确,写自己的Set<String> excelKey = mapList.get(0).keySet();Map<String,String> mapKey=new HashMap<>();if(!verifyDataColumn(excelKey,mapKey))return AjaxResult.error("列名称有误,请按规定模板导入!");//3.校验数据是否符合,写自己的String codeName = mapKey.get("unit_code");String s = vComPersonViewService.matchTrainInfo(mapList,trainBaseid);if(!s.isEmpty()){return AjaxResult.error(s);}//写入数据,mapList就是读取的到excel数据,其余参数写自己需要的boolean result = studentPlanService.importExcel(mapList,trainBaseid);return AjaxResult.success("导入成功",null);}//验证列名称是否一致private boolean verifyDataColumn(Set<String> excelKey, Map<String,String> mapKey) {//加载数据列List<Map<String, String>> importMap = new ArrayList<>();Map<String, String> map = new HashMap<>();map.put("column_name","姓名");map.put("column_name","学员编号");
//        map.put("column_name","身份证号码");map.put("column_name","年度");map.put("column_name","培训状态");map.put("column_name","单元");map.put("column_name","轮转科室");map.put("column_name","轮转开始时间");map.put("column_name","轮转结束时间");importMap.add(map);boolean b=true;for (Map<String, String> map2 : importMap) {String column_name = map2.get("column_name");mapKey.put(map2.get("column_value"),column_name);if(!excelKey.contains(column_name)){b=false;}}return b;}

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

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

相关文章

DVWA 靶场 JavaScript 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

【Python】从基础到进阶(一):了解Python语言基础以及变量的相关知识

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 引言一、Python简介1.1 历史背景1.2 设计哲学1.3 语言特性1.4 应用场景1.5 为什么选择Python 二、Python语言基础2.1 注释规则2.1.1 单行注释2.1.2 多行注释2.1.3 文件编码声明注释 2.2 代码缩进2.3 编码规范2.3.1 命名规范…

vim选中内容进入visual模式

描述 有的版本的vim&#xff0c;检测到xterm终端时&#xff0c;会启动鼠标全功能模式&#xff0c;鼠标选中一段文本后&#xff0c;自动进入visual模式&#xff0c;滚动滚轮可以修改选中的位置。可以使用常见的Vim命令来操作它们&#xff0c;例如&#xff1a; y 复制&#xff…

AlphaMissense:预测错义变异的致病性

错义变异或错义变体&#xff08;missense variation或missense variants&#xff09;是改变蛋白质氨基酸序列的遗传变异。致病性错义变异会严重破坏蛋白质功能&#xff0c;在目前观察到的400多万个错义变异中&#xff0c;只有2%在临床上被确定为致病或良性。对剩下的类型不明的…

力扣随机一题 模拟+字符串

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 1910.删除一个字符串中所有出现的给定子字符串【中等】 题目&#xff1a; …

【数据结构与算法】树的遍历,森林遍历 详解

树的先根遍历、后根遍历对应其二叉树的哪种遍历 树的先根遍历对应其二叉树的先序遍历&#xff08;根-左-右&#xff09;。树的后根遍历对应其二叉树的中序遍历&#xff08;左-根-右&#xff09;。 森林的先根遍历、中根遍历对应其二叉树的哪种遍历? 森林的先根遍历对应其二…

Elasticsearch 数据提取 - 最适合这项工作的工具是什么?

作者&#xff1a;来自 Elastic Josh Asres 了解在 Elasticsearch 中为你的搜索用例提取数据的所有不同方式。 对于搜索用例&#xff0c;高效采集和处理来自各种来源的数据的能力至关重要。无论你处理的是 SQL 数据库、CRM 还是任何自定义数据源&#xff0c;选择正确的数据采集…

STM32三种调试工具CMSIS-DAP、J-Link和ST-Link

一.概述 CMSIS-DAP、J-Link和ST-Link均是嵌入式处理器的开发调试工具。 CMSIS-DAP是一种轻量级调试接口&#xff0c;旨在实现开源的开发调试。它的优点是使用方便、通用性好、成本低&#xff0c;还支持固件的在线升级。 J-Link是一款由德国公司SEGGER Microcontroller开发的…

《Deep learning practice》learning notes

学习笔记&#xff1a; 【公开课】旷视x北大《深度学习实践》&#xff08;28课时全&#xff09; R Talk | 旷视科技目标检测概述&#xff1a;Beyond RetinaNet and Mask R-CNN 文章目录 Lecture 1: Introduction to Computer Vision and Deep Learning&#xff08;孙剑&#x…

Semaphore(应对并发问题的工具类)

Semaphore Semaphore字面意思是信号量的意思&#xff0c;它的作用是控制访问特定资源的线程数目。 举例&#xff1a;现在有一个十字路口&#xff0c;有多辆汽车需要进经过这个十字路口&#xff0c;但是我们规定同时只能有两辆汽车经过。其他汽车处于等待状态&#xff0c;只要…

系统架构师考点--数据库系统

大家好。今天我来总结一下数据库系统的相关考点。本考点一般情况下上午场考试占3-5分&#xff0c;下午场案例分析题也会出现。 一、数据库系统 数据&#xff1a;数据库中存储的基本对象&#xff0c;是描述事物的符号记录。数据的种类:文本、图形、图像、音频、视频、学生的档…

AI/ML 数据湖参考架构架构师指南

这篇文章的缩写版本于 2024 年 3 月 19 日出现在 The New Stack 上。 在企业人工智能中&#xff0c;主要有两种类型的模型&#xff1a;判别模型和生成模型。判别模型用于对数据进行分类或预测&#xff0c;而生成模型用于创建新数据。尽管生成式人工智能最近占据了新闻的主导地…

【PyTorch】【机器学习】图片张量、通道分解合成和裁剪

一、导入所需库 from PIL import Image import torch import numpy as np import matplotlib.pyplot as plt二、读取图片 pic np.array(Image.open(venice-boat.jpg))上述代码解释&#xff1a;先用Image.open()方法读取jpg格式图片&#xff0c;再用np.array()方法将图片转成…

loveqq-framework 和 thymeleaf 整合遇到的 th:field 的坑,原来只有 spring 下才有效

相信大家在使用 thymeleaf 的时候&#xff0c;绝大部分都是和 springboot 一块儿使用的&#xff0c;所以 th:field 属性用的很舒服。 但实际上&#xff0c;th:field 只有在 spring 环境下下有用&#xff0c;单独的 thymeleaf 是不支持的&#xff01; 为什么我知道呢&#xff…

DBeaver 数据结果集设置不显示逗号(太丑了)

从Navicat切换过来使用DBeaver&#xff0c;发现类似bigint 这种数据类型在结果集窗口中显示总是给我加上一个逗号&#xff0c;看着很不习惯&#xff0c;也比较占空间&#xff0c;个人觉得这种可读性也不好。 于是我在网上尝试搜索设置方法&#xff0c;可能我的关键词没命中&…

【ARMv8/ARMv9 硬件加速系列 2.4 -- ARM NEON Q寄存器与V寄存器的关系】

文章目录 Q 与 V 的关系向量寄存器 v 的使用赋值操作寄存器赋值总结Q 与 V 的关系 在ARMv8/v9架构中,v寄存器和q寄存器实际上是对相同的物理硬件资源的不同称呼,它们都是指向ARM的SIMD(单指令多数据)向量寄存器。这些寄存器用于高效执行向量和浮点运算,特别是在多媒体处理…

EM算法数学推导

EM算法可以看李航老师的《机器学习方法》、机器学习白板推导、EM算法及其推广进行学习。下文的数学推导出自“南瓜书”&#xff0c;记录在此只为方便查阅。

什么是MQ、优势与劣势、应用场景及模式

目录 一、什么是MQ? 二、RabbitMQ的优势 三、RabbitMQ的劣势 四、RabbitMQ能解决的问题 五、什么时候用到RabbitMQ? 六、RabbitMQ的几种模式 消息队列(Message Queue,MQ)是一种跨进程通信的机制,通过消息传递使不同的应用程序能够相互通信。RabbitMQ是目前流行的开源…

新手充电-boost升压电路解析

1.boost升压电路解析 本篇文章从充放电两个方面来对Boost电路的原理进行了讲解。并在最后补充了一些书本上没有的知识,整体属于较为新手向的文章,希望大家在阅读过本篇文章之后,能对Boost电路的基本原理有进一步了解。 Boost电路是一种开关直流升压电路,它能够使输出电压高…

【Qt基础教程】事件

文章目录 前言事件简介事件示例总结 前言 在开发复杂的图形用户界面(GUI)应用程序时&#xff0c;理解和掌握事件处理是至关重要的。Qt&#xff0c;作为一个强大的跨平台应用程序开发框架&#xff0c;提供了一套完整的事件处理系统。本教程旨在介绍Qt事件处理的基础知识&#x…