记录工作

需求是导入数据的时候需要判断哪一行是空行,或者哪一行超过限制字符,然后返回给前端做展示

@PostMapping("/importExcel")
@ApiOperation("导入用户")
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "Excel 文件", required = true, dataTypeClass = MultipartFile.class),
@ApiImplicitParam(name = "updateSupport", value = "是否支持更新,默认为 false", example = "true", dataTypeClass = Boolean.class)
})
public Response<SaveAndUpdateVO> importExcel(@RequestParam("file") MultipartFile file,
@RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception {
SaveAndUpdateVO saveAndUpdateVO = SaveAndUpdateVO.builder()
.isSuccess(sysUserService.importUsers(file, updateSupport)).build();
return Response.build(saveAndUpdateVO);
}

这里的Response类是自己做的统一返回封装类,SaveAndUpdateVO这个类也是一个返回类,可以自己用其他方法或者类代替

public Boolean importUsers(MultipartFile file, boolean isUpdateSupport) {
if (file.isEmpty()) {
throw new BizException(ErrorCode.DATA_ERROR, "导入用户数据不能为空!");
} List<UserImportExcelResponse> userImportExcelResponses = importUsers(file);
userImportExcelResponses.forEach(importUser -> { SysUser sysUsers = getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getLoginName, importUser.getLoginName())
.eq(SysUser::getDelFlag, Constants.DEL_FLAG_DELETED));
// 判断用户如果不存在,在进行插入
if (sysUsers == null) {
AssertBiz.isMobile(importUser.getPhone(), "手机号码格式错误!");
SysUser sysUser = new SysUser();
BeanUtil.copyProperties(importUser, sysUser);
//设置创建时间
sysUser.setServerCreateTime(LocalDateTime.now());
//设置默认密码密码
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
sysUser.setPassword(bCryptPasswordEncoder.encode("Admin@123456"));
//设置主键id-uuid
String userId = IdUtils.getId();
sysUser.setId(userId);
sysUser.setDelFlag(Constants.DEL_FLAG_DELETED);
//新增用户
save(sysUser);
AssertBiz.isNotEmpty(importUser.getRoleName(), "角色名称不能为空!");
SysRole sysRoles = sysRoleService.getOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleName, importUser.getRoleName())
.eq(SysRole::getDelFlag, Constants.DEL_FLAG_DELETED));
AssertBiz.notNull(sysRoles, "该角色不存在!");
//新增用户角色
SysUserRole sysUserRole = new SysUserRole(userId, sysRoles.getId(), LocalDateTime.now(), LocalDateTime.now(), Constants.DEL_FLAG_DELETED);
sysUserRoleService.save(sysUserRole);
AssertBiz.isNotEmpty(importUser.getOrgName(), "部门名称不能为空!");
SysOrganization one = sysOrganizationService.getOne(new LambdaQueryWrapper<SysOrganization>().select(SysOrganization::getId)
.eq(SysOrganization::getOrgName, importUser.getOrgName())
.eq(SysOrganization::getDelFlag, Constants.DEL_FLAG_DELETED));
AssertBiz.notNull(one, "该部门不存在!或是用户没有该部门权限!");
//新增用户组织
SysUserOrg sysUserOrg = new SysUserOrg(userId, one.getId(), LocalDateTime.now(), LocalDateTime.now(), Constants.DEL_FLAG_DELETED);
sysUserOrgService.save(sysUserOrg);
return;
}
// 如果存在,判断是否允许更新
if (!isUpdateSupport) {
throw new BizException(ErrorCode.DATA_ERROR, "用户账号[" + importUser.getLoginName() + "]已存在,不能重复添加!");
}
AssertBiz.isNotEmpty(sysUsers.getId(), "用户id不能为空!");
LambdaUpdateWrapper<SysUser> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(SysUser::getId, sysUsers.getId())
.set(SysUser::getStatus, importUser.getStatus())
.set(SysUser::getUserName, importUser.getUserName())
.set(SysUser::getPhone, importUser.getPhone())
.set(SysUser::getServerUpdateTime, LocalDateTime.now());
update(updateWrapper);
});
return true;
}
/**
* 导入数据解析校验
*
* @param file
* @return
*/
private List<UserImportExcelResponse> importUsers(MultipartFile file) {
List<UserImportExcelResponse> list = new ArrayList<>();
try {
//根据路径获取这个操作excel的实例
XSSFWorkbook wb = new XSSFWorkbook(file.getInputStream());
//根据页面index 获取sheet页
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
int sheets = sheet.getPhysicalNumberOfRows();
//循环sesheet页中数据从第二行开始,第一行是标题
for (int i = 1; i < sheets; i++) {
//获取每一行数据
row = sheet.getRow(i);
String loginName = row.getCell(0).toString();
String userName = row.getCell(1).toString();
String roleName = row.getCell(2).toString();
String orgName = row.getCell(3).toString();
String phone = row.getCell(4).toString();
String status = row.getCell(5).toString();
int line = i + 1;
checkLength(loginName, userName, roleName, orgName, phone, line);
UserImportExcelResponse excel = new UserImportExcelResponse();
AssertBiz.isNotEmpty(loginName, "在excel表第" + line + "行,第1列,用户登录名不能为空!");
excel.setLoginName(loginName);
AssertBiz.isNotEmpty(userName, "在excel表第" + line + "行,第2列,用户名称不能为空!");
excel.setUserName(userName);
AssertBiz.isNotEmpty(roleName, "在excel表第" + line + "行,第3列,角色名称不能为空!");
excel.setRoleName(roleName);
AssertBiz.isNotEmpty(orgName, "在excel表第" + line + "行,第4列,部门名称不能为空!");
excel.setOrgName(orgName);
AssertBiz.isNotEmpty(phone, "在excel表第" + line + "行,第5列,电话不能为空!");
excel.setPhone(phone);
AssertBiz.isNotEmpty(status, "在excel表第" + line + "行,第6列,用户状态不能为空!");
excel.setStatus(status);
list.add(excel);
}
} catch (Exception e) {
e.printStackTrace();
String substring = String.valueOf(e).substring(String.valueOf(e).indexOf(":") + 1);
throw new BizException(ErrorCode.DATA_ERROR, substring);
}
return list;
}
/**
* 校验字符串长度
*
* @param loginName
* @param userName
* @param roleName
* @param orgName
* @param phone
*/
private void checkLength(String loginName, String userName, String roleName, String orgName, String phone, int row) {
int loginNameLength = loginName.length();
int userNameLength = userName.length();
int roleNameLength = roleName.length();
int orgNameLength = orgName.length();
int phoneLength = phone.length(); if (loginNameLength > 16) {
throw new BizException(ErrorCode.DATA_ERROR, "在excel表第" + row + "行,第1列,导入用户登录名不能超过16个字符!");
}
if (userNameLength > 16) {
throw new BizException(ErrorCode.DATA_ERROR, "在excel表第" + row + "行,第2列,导入用户昵称名不能超过16个字符!");
}
if (roleNameLength > 16) {
throw new BizException(ErrorCode.DATA_ERROR, "在excel表第" + row + "行,第3列,导入角色名不能超过16个字符!");
}
if (orgNameLength > 16) {
throw new BizException(ErrorCode.DATA_ERROR, "在excel表第" + row + "行,第4列,导入部门名不能超过16个字符!");
}
if (phoneLength > 11) {
throw new BizException(ErrorCode.DATA_ERROR, "在excel表第" + row + "行,第5列,电话格式不正确!");
}
if (phoneLength < 11) {
throw new BizException(ErrorCode.DATA_ERROR, "在excel表第" + row + "行,第5列,电话格式不正确!");
}
}

到此本文就结束了

java 导入Excel数据校验判断哪行那列的更多相关文章

  1. java导入Excel表格数据

    首先导入Excel数据需要几样东西 第一需要两个依赖包,这里直接是在pom注入依赖 <!--excel--> <dependency> <groupId>org.a ...

  2. Java实现Excel数据批量导入数据库

    Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...

  3. 结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程

    1.bootstrap-fileinpu的简单介绍 在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用, ...

  4. 基于 Aspose.Cells与XML导入excel 数据----操作类封装

    前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...

  5. java实现Excel数据导出

    java实现Excel数据导出: 目前,比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel Jakarta POI 是一套用于访问微软格式文档的Java ...

  6. thinkphp整合系列之phpexcel导入excel数据

    一:导入phpexcel /ThinkPHP/Library/Vendor/PHPExcel 二:导入excel的函数 /** * 导入excel文件 * @param string $file ex ...

  7. springboot批量导入excel数据

    1 背景 小白今天闲着没事,在公司摸鱼,以为今天有事无聊的一天,突然上头说小子,今天实现一下批量导入Excel数据吧,当时我的内心是拒绝的,然后默默打开idea. 2 介绍 2.1 框架 java本身 ...

  8. PowerBuilder学习笔记之导入Excel数据

    原文地址:http://blog.chinaunix.net/uid-20586802-id-3235549.html /*****************简单的导入功能,涉及到数据类型判断***** ...

  9. PLSQL Developer导入Excel数据

    LSQL Developer导入Excel数据 最近处理将Excel数据导入Oracle的工作比较多.之前都是采用Sqlldr命令行导入的方式处理.每次导入不同格式的Excel表数据,都需要先把Exc ...

  10. 导入excel数据

    前提条件:先要安装好EXCEL软件. 程序中经常要用到导入excel数据的功能.其实通过ole操作excel就简单的几行代码,但记性不好,经常要用经常要找, 还是作篇笔记吧. var ExcelApp ...

随机推荐

  1. 【白话模电1】PN结与二极管

    距离上一次写半导体,已经过了很久了,上次分享了本征半导体的基本概念: https://zhuanlan.zhihu.com/p/109483580 今天给大家聊聊半导体工业中的基础:PN结与二极管 1 ...

  2. 基于 VScode 搭建 Qt 运行环境

    插件 C/C++ Qt tools Qt Configure CMake CMake Tools 下载 qt https://download.qt.io/official_releases/onli ...

  3. 複合語句塊——關於while循環的

    看這兩個小段代碼: /*code1.*/ index=0; while(index<10) sam = 10*index+2; printf("sam=%d\n",sam); ...

  4. angular打包部署设置publicPath文件目录及访问地址,解决打包完成后,运行打包文件,报错404,js,css未找到

    方案1.改变文件目录 不改变访问地址:XXXPRO 是部署的服务器上面的 文件夹名称 ng build --prod --base-href /XXXPRO 方案2.改变访问地址录同时改变文件目录-- ...

  5. DVWA靶场实战(十一)——XSS(Reflected)

    DVWA靶场实战(十一) 十一.XSS(Reflected): 1.漏洞原理: XSS被称为跨站脚本攻击(Cross Site Script),而Reflected被称作反射型XSS.不同于DOM和S ...

  6. 服务器搭建(CenOS 7 Apache + PHP _Mysql环境(LAMP))

    服务器搭建(CenOS 7 Apache + PHP _Mysql环境(LAMP)) 第一步.更换阿里云 yum源 curl -o /etc/yum.repos.d/CentOS-Base.repo  ...

  7. 前端知识点(js部分)

    目录 一.JS简介 简介 ECMAScript的历史 二.JS基础 1.注释语法 2.引入js的多种方式 3.结束符号 三.变量与常量 编写和运行js代码的两种方式 变量声明 四.基本数据类型 1.数 ...

  8. 关于xlrd最新版本不支持.xlsx文件的解决办法

    #卸载已安装的 pip uninstall xlrd #下载对应的版本 pip install xlrd==1.2.0 #卸载已安装的pip uninstall xlrd #下载对应的版本pip in ...

  9. ChatGPT:让程序开发更轻松

    作者:京东科技 赵龙波 "贾维斯,你在吗?" "随时待命,先生." 类似<钢铁侠>里的人工智能助理贾维斯,ChatGPT或许是你的随时待命的助手.C ...

  10. VS Code windows系统C/C++环境配置_添加路径

    1.安装cygwin 2.配置VS Code 按ctrl + shift + p ,选择 c/c++:Edit configuration(json) { "configurations&q ...