1、第一张sheet的导入类

@Data
@ExcelTarget("PmAppServiceManageNewImportVO")
@EqualsAndHashCode(callSuper = false)
public class PmAppServiceManageNewImportVO extends ExcelVerifyInfo implements IExcelModel {/** 应用名称 */@Excel(name = "*应用名称", width = 18, orderNum = "1")@NotNullprivate String projectName;/** 应用负责人 */@Excel(name = "*应用负责人", width = 18, orderNum = "2")@NotNullprivate String applicationUser;/** 业务负责人 */@Excel(name = "*业务负责人", width = 18, orderNum = "3")@NotNullprivate String businessUser;/** 应用状态;1使用,2停用 */@Excel(name = "*应用状态", width = 18, orderNum = "4", replace = {"使用_1", "停用_2", "_null"}, addressList = true)@NotNullprivate Integer status;/** 环境;1正式,2测试,3开发) */@Excel(name = "*环境", width = 18, orderNum = "5", replace = {"开发_3", "测试_2", "正式_1", "_null"},addressList = true)@NotBlankprivate String environment;/** 管理员账号 */@Excel(name = "管理员账号", width = 18, orderNum = "6")private String adminAccount;/** 管理员密码 */@Excel(name = "管理员密码", width = 18, orderNum = "7")private String adminPassword;/** 备注 */@Excel(name = "备注", width = 18, orderNum = "8")private String remarks;@ExcelIgnoreprivate String errorMsg;
}

1.1、第二张sheet导入类

@Data
@ExcelTarget("PmAppServiceManageDetailsImportVO")
@EqualsAndHashCode(callSuper = false)
public class PmAppServiceManageDetailsImportVO extends ExcelVerifyInfo implements IExcelModel {/** 服务名称 */@Excel(name = "*服务名称", width = 18, orderNum = "1")@NotBlankprivate String serviceName;/** 服务类型 */@Excel(name = "*服务类型", width = 18, orderNum = "2", replace = {"前端服务_1", "后端服务_2", "数据服务_3", "MQ服务_4", "附件服务_5", "通用服务_6", "外部服务_7"},addressList = true)@NotBlankprivate String serviceType;/** 运维负责人 */@Excel(name = "*运维负责人", width = 18, orderNum = "3")@NotNullprivate String operationUser;/** 开发负责人 */@Excel(name = "*开发负责人", width = 18, orderNum = "4")@NotNullprivate String developmentUser;/** 映射IP */@Excel(name = "映射IP", width = 18, orderNum = "5")private String mappingIp;/** 映射端口 */@Excel(name = "映射端口", width = 18, orderNum = "6")private String mappingPort;/** 内部IP地址 */@Excel(name = "*内部IP", width = 18, orderNum = "7")@NotBlankprivate String insideIp;/** 内部端口 */@Excel(name = "*内部端口", width = 18, orderNum = "8")@Pattern(regexp  = "^[0-9]*$", message = "只能输入数字!")@NotBlankprivate String occupyPort;/** 超融合集群 */@Excel(name = "超融合集群", width = 18, orderNum = "9")private String hyperconvergedCluster;/** CPU用量 */@Excel(name = "CPU用量", width = 18, orderNum = "10")private String centralProcessingUnit;/** 内存用量 */@Excel(name = "内存用量", width = 18, orderNum = "11")private String internalStorage;/** 硬盘用量 */@Excel(name = "硬盘用量", width = 18, orderNum = "12")private String hardDiskSize;@ExcelIgnoreprivate String errorMsg;
}

1.2、注解解释

  • @ExcelTarget:表示要导出的目标对象,作用在实体类上。
  • @EqualsAndHashCode(callSuper = false):排除父类字段。
  • @Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。
  • @ExcelIgnore:标注在成员变量上,默认所有字段都会和excel去匹配,加了这个注解会忽略该字段。
  • @Excel: 作用到filed上面,是对Excel一列的一个描述
    • name:列名。
    • width:列宽。
    • orderNum:列的排序。如果不加,将根据实体类的顺序进行导出。
    • needMerge:纵向合并单元格。用于含list中创建多个row。
    • replace:值的替换。也就是excel单元格表现为下拉框。
EasyPOI官方文档1
EasyPOI官方文档2

2、配置设置

2.1、导入第一张sheet

 ImportParams params1 = new ImportParams();// 读取第一张sheetparams1.setStartSheetIndex(0);params1.setSheetNum(1);//标题行2params1.setTitleRows(2);//表头1params1.setHeadRows(1);// 不需要保存params1.setNeedSave(false);//设置读取空值params1.setKeyIndex(null);// 开启验证params1.setNeedVerify(true);String message = "";//创建HSSFWorkbookWorkbook hssfWorkbook = new HSSFWorkbook();try (InputStream inputStream = file.getInputStream()){//easypoi导入,数据量不大ExcelImportResult<PmAppServiceManageNewImportVO> appServiceResult =ExcelImportUtil.importExcelMore(inputStream, PmAppServiceManageNewImportVO.class, params1);//创建空数组,用于导入内容的新增或者更新List<PmAppServiceManageNew> pmAppServiceManageNewAddList = new ArrayList<>();List<PmAppServiceManageNew> pmAppServiceManageNewUpdateList = new ArrayList<>();hssfWorkbook = appServiceResult.getWorkbook();//显示错误信息for (int i = 0; i < appServiceResult.getFailList().size(); i++){PmAppServiceManageNewImportVO excel = appServiceResult.getFailList().get(i);if (appServiceResult.getFailList().get(i).getErrorMsg() != null&& !"".equals(appServiceResult.getFailList().get(i).getErrorMsg())){message = message + "--> 第" + excel.getRowNum() + "行,"+ appServiceResult.getFailList().get(i).getErrorMsg();}}appServiceResult.getList().stream().forEach(appService -> {String projectName = appService.getProjectName();String environment = appService.getEnvironment();String applicationUser = appService.getApplicationUser();String businessUser = appService.getBusinessUser();// 应用名称-环境唯一PmAppServiceManageNew selectOne = pmAppServiceManageMapper.selectList(new LambdaQueryWrapper<PmAppServiceManageNew>().eq(PmAppServiceManageNew::getProjectName, projectName).eq(PmAppServiceManageNew::getEnvironment, environment).eq(PmAppServiceManageNew::getDelFlag, DelFlagEnum.NORMALL.getValue())).stream().findFirst().orElse(null);// 存入数据库PmAppServiceManageNew pmAppServiceManageNew = new PmAppServiceManageNew();pmAppServiceManageNew.setProjectName(appService.getProjectName());pmAppServiceManageNew.setApplicationUser(applicationUser);pmAppServiceManageNew.setBusinessUser(businessUser);pmAppServiceManageNew.setStatus(appService.getStatus());pmAppServiceManageNew.setEnvironment(appService.getEnvironment());pmAppServiceManageNew.setAdminAccount(appService.getAdminAccount());pmAppServiceManageNew.setAdminPassword(appService.getAdminPassword());pmAppServiceManageNew.setDelFlag(DelFlagEnum.NORMALL.getValue());pmAppServiceManageNew.setCreateBy(SecurityUtils.getUser().getId());pmAppServiceManageNew.setCreateTime(LocalDateTime.now());// 新增if (ObjectUtil.isNull(selectOne)){pmAppServiceManageNewAddList.add(pmAppServiceManageNew);}else{// 更新pmAppServiceManageNew.setId(selectOne.getId());pmAppServiceManageNew.setUpdateBy(SecurityUtils.getUser().getId());pmAppServiceManageNew.setUpdateTime(LocalDateTime.now());pmAppServiceManageNewUpdateList.add(pmAppServiceManageNew);}});if (ObjectUtil.isNotEmpty(pmAppServiceManageNewAddList)){saveBatch(pmAppServiceManageNewAddList);}if (ObjectUtil.isNotEmpty(pmAppServiceManageNewUpdateList)){updateBatchById(pmAppServiceManageNewUpdateList);}}

2.2、导入后面的sheet

            // 导入后面的详情表for (int numSheet = 1; numSheet <= hssfWorkbook.getNumberOfSheets() - 1; numSheet++){//设置sheet的名称:projectName-environment String sheetName = hssfWorkbook.getSheetName(numSheet);if (!sheetName.contains("-")){throw new BizException("第" + numSheet + "个sheet命名不规范,请重新编辑!");}String[] split = sheetName.split("-");String projectName = split[0];String environment = "";switch (split[1]){case "正式":{environment = "1";break;}case "测试":{environment = "2";break;}case "开发":{environment = "3";break;}default:break;}// 校验sheetName对应的project是否存在PmAppServiceManageNew selectOne =pmAppServiceManageMapper.selectList(new LambdaQueryWrapper<PmAppServiceManageNew>().eq(PmAppServiceManageNew::getProjectName, projectName).eq(PmAppServiceManageNew::getEnvironment, environment).eq(PmAppServiceManageNew::getDelFlag, DelFlagEnum.NORMALL.getValue())).stream().findFirst().orElse(null);if (ObjectUtil.isNull(selectOne)){throw new BizException("应用:" + sheetName + "不存在,请先添加对应应用!");}ImportParams params2 = new ImportParams();// 读取第二个sheet到第一千个sheetparams2.setStartSheetIndex(numSheet);params2.setSheetNum(1);params2.setNeedSave(false);params2.setKeyIndex(null);params2.setNeedVerify(true);List<PmAppServiceManageDetails> pmAppServiceManageDetailsAddList = new ArrayList<>();List<PmAppServiceManageDetails> pmAppServiceManageDetailsUpdateList = new ArrayList<>();try (InputStream inputStream1 = file.getInputStream()){ExcelImportResult<PmAppServiceManageDetailsImportVO> appServiceDetailsResult =ExcelImportUtil.importExcelMore(inputStream1, PmAppServiceManageDetailsImportVO.class, params2);//显示报错信息for (int i = 0; i < appServiceDetailsResult.getFailList().size(); i++){PmAppServiceManageDetailsImportVO excel = appServiceDetailsResult.getFailList().get(i);if (appServiceDetailsResult.getFailList().get(i).getErrorMsg() != null&& !"".equals(appServiceDetailsResult.getFailList().get(i).getErrorMsg())){message = message + "--> sheet:" + sheetName + "中," + "第" + (excel.getRowNum()) + "行"+ appServiceDetailsResult.getFailList().get(i).getErrorMsg();}}appServiceDetailsResult.getList().stream().forEach(appServiceDetail -> {String insideIp = appServiceDetail.getInsideIp();String occupyPort = appServiceDetail.getOccupyPort();String operationUser = appServiceDetail.getOperationUser();String developmentUser = appServiceDetail.getDevelopmentUser();// 查询内部IP-内部端口唯一PmAppServiceManageDetails details = detailsMapper.selectList(new LambdaQueryWrapper<PmAppServiceManageDetails>().eq(PmAppServiceManageDetails::getInsideIp, insideIp).eq(PmAppServiceManageDetails::getOccupyPort, occupyPort).eq(PmAppServiceManageDetails::getDelFlag, DelFlagEnum.NORMALL.getValue())).stream().findFirst().orElse(null);String serviceType = appServiceDetail.getServiceType();String serviceName = appServiceDetail.getServiceName();// 前端服务校验端口是否满足在30000-31500之间if ("1".equals(serviceType)){if (!(30000 < Integer.parseInt(occupyPort) && 31500 > Integer.parseInt(occupyPort))){throw new BizException("sheet:" + sheetName + "中,服务:" + serviceName + "为前端服务,端口需要满足在30000-31500之间!");}}// 后端服务校验端口是否满足在31501-32767之间if ("2".equals(serviceType)){if (!(31501 < Integer.parseInt(occupyPort) && 32767 > Integer.parseInt(occupyPort))){throw new BizException("sheet:" + sheetName + "中,服务:" + serviceName + "为后端服务,端口需要满足在31501-32767之间!");}}// 存入数据库PmAppServiceManageDetails pmAppServiceManageDetails = new PmAppServiceManageDetails();pmAppServiceManageDetails.setPmAppServiceManageId(selectOne.getId());pmAppServiceManageDetails.setServiceName(serviceName);pmAppServiceManageDetails.setServiceType(serviceType);pmAppServiceManageDetails.setOperationUser(operationUser);pmAppServiceManageDetails.setDevelopmentUser(developmentUser);pmAppServiceManageDetails.setMappingIp(appServiceDetail.getMappingIp());pmAppServiceManageDetails.setMappingPort(appServiceDetail.getMappingPort());pmAppServiceManageDetails.setInsideIp(appServiceDetail.getInsideIp());pmAppServiceManageDetails.setOccupyPort(occupyPort);pmAppServiceManageDetails.setHyperconvergedCluster(appServiceDetail.getHyperconvergedCluster());pmAppServiceManageDetails.setCentralProcessingUnit(appServiceDetail.getCentralProcessingUnit());pmAppServiceManageDetails.setInternalStorage(appServiceDetail.getInternalStorage());pmAppServiceManageDetails.setHardDiskSize(appServiceDetail.getHardDiskSize());pmAppServiceManageDetails.setDelFlag(DelFlagEnum.NORMALL.getValue());pmAppServiceManageDetails.setCreateBy(SecurityUtils.getUser().getId());pmAppServiceManageDetails.setCreateTime(LocalDateTime.now());// 新增if (ObjectUtil.isNull(details)){pmAppServiceManageDetailsAddList.add(pmAppServiceManageDetails);}else{// 校验不同应用内部IP端口相同PmAppServiceManageNew pmAppServiceManageNew =pmAppServiceManageMapper.selectById(details.getPmAppServiceManageId());if (!ObjectUtil.equal(pmAppServiceManageNew.getId(), selectOne.getId())){throw new BizException("sheet:" + sheetName + "中,服务的内部IP和内部端口,"+ appServiceDetail.getInsideIp() + ":" + appServiceDetail.getOccupyPort() + "在应用"+ pmAppServiceManageNew.getProjectName() + "中已存在!");}// 更新pmAppServiceManageDetails.setId(details.getId());pmAppServiceManageDetails.setUpdateBy(SecurityUtils.getUser().getId());pmAppServiceManageDetails.setUpdateTime(LocalDateTime.now());pmAppServiceManageDetailsUpdateList.add(pmAppServiceManageDetails);}});if (ObjectUtil.isNotEmpty(pmAppServiceManageDetailsAddList)){pmAppServiceManageDetailsService.saveBatch(pmAppServiceManageDetailsAddList);}if (ObjectUtil.isNotEmpty(pmAppServiceManageDetailsUpdateList)){pmAppServiceManageDetailsService.updateBatchById(pmAppServiceManageDetailsUpdateList);}}}if (!"".equals(message)){throw new BizException(message);}

2.3、最后导入失败,抛出异常,导入成功返回信息

try{//代码块
}  catch (Exception e){throw new BizException(e.getMessage());}return R.ok("导入成功!");

3、导入excel模板截图

EasyPOI导入多个sheet,既可更新又可新增,且从第二个sheet开始是根据第一个sheet内容的详情导入相关推荐

  1. matlab sheet名字,MATLAB得到excel多个非默认sheet名_怎样利用matlab去读取一个excel表中多个sheet的数据并导入一个sheet中?...

    如何用matlab读取一个excel表格中的若干个工作表 如果数字: xlsread('e:/shiyanshuju/shiyanbiaoge','sheet1','B1:D1440') 最好个表格放 ...

  2. oracle导入失败后怎样删除已导入数据,Oracle数据的导入、导出、插入、更新及删除总结...

    Oracle数据的导入.导出.插入.更新及删除总结 今天主要介绍一下使用Oracle的IDE:PL\SQL Developer进行数据的导入及导出操做方法. web 1. 数据导出 数据的导出比较简单 ...

  3. python处理多个excel文件-python多个excel文件合并成一个sheet

    运营人员需要历年的订单数据,这就需要把多个文件夹下面的excel文件合并到一个sheet中,之前的解决的办法是用VBA把多个excel文件合并成一个表的多个sheet,再把多个sheet合并成一个sh ...

  4. 使用Python3和BeautifulSoup爬取笑话网站内容,并导入Excel

    本文使用Python3和BeautifulSoup爬取网站内容,并导入Excel. #抓取糗事百科笑话的脚本 import urllib.request from bs4 import Beautif ...

  5. pythonexcel合并多个sheet_python多个excel文件合并成一个sheet

    运营人员需要历年的订单数据,这就需要把多个文件夹下面的excel文件合并到一个sheet中,之前的解决的办法是用VBA把多个excel文件合并成一个表的多个sheet,再把多个sheet合并成一个sh ...

  6. 【SeeMusic】创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | 导入音频 | 导入视频 )

    SeeMusic 系列文章目录 [SeeMusic]下载安装并注册 SeeMusic 软件 [SeeMusic]创建 SeeMusic 工程并编辑相关内容 ( 创建工程 | 导入 MIDI 文件 | ...

  7. c# applibrary实现一个Sheet表中存放多张DataTable数据

    1.工具类(applibrary.dll) public class ExcelHelper {/// <summary>/// 文件名/// </summary>public ...

  8. java追加一个sheet_(二)POI-创建一个sheet页,并添加行列数据

    原文:https://blog.csdn.net/class157/article/details/92800439 1.只创建sheet页 package com.java.poi; import ...

  9. python拆分excel的sheet为单文件_pandas处理excel一个sheet拆分为多个sheet

    指定某一列作为拆分依据,pandas如何把一个excel的一个sheet拆分为多个sheet呢?具体思路如下: 1.读取excel文件获取DataFrame对象df. 2.获取指定列的Series对象 ...

最新文章

  1. (原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员
  2. 宜信开源|详解PaaS平台LAIN的功能和架构
  3. 使用%的符号问题(只与被除数有关)
  4. linux手机远程桌面连接软件下载,HomeCenter手机远程桌面下载_HomeCenter手机远程桌面官方下载-太平洋下载中心...
  5. 暑假集训-个人赛第六场
  6. 深度学习之OCR相关经验记录
  7. DSP31段调音教程及调音MP3
  8. 【一分钟了解UWP】微信UWP
  9. 计算机显示不出桌面的文件夹,win10电脑保存文件路径不显示桌面怎么办?
  10. C语言基础知识 ---------- 指针(pointer)、结构(structure)、字串(Char)
  11. 少儿编程语言有哪些分类,分别适合多大年龄的学生?
  12. 【世语纠正】吾生也有涯,而知也无涯丶本意知识太多,没必要都去
  13. 商城购物系统【用户登录注册,购物页面,购物车页面,订单页面】
  14. 简易记账开发笔记之Fragment(后续)
  15. 计算机专业大学课程学习路线图
  16. c语言程序设计书店销售管理系统,C语言课程设计-书店管理系统
  17. My $650,100 Lunch with Warren Buffett
  18. taking address of temporary错误
  19. Java判断字符串是不是整数
  20. 阿德莱德计算机科学专业怎么样,阿德莱德大学计算机专业排名如何 排名多少...

热门文章

  1. iOS开发,tableView在Grouped样式下,表头表尾空白问题解决
  2. 侵犯公民个人信息: “两高”首次出台司法解释 打击大数据征信乱象
  3. IO接口标准(3):HCSL和LPHCSL
  4. [译] 如何从一个业余爱好者成长成为专业开发者
  5. 【有限元】弱反射光纤光栅水听器模态分析与谐响应分析
  6. MySQL 之 多表查询
  7. 友盟+U-App全新升级,免费提供交互式即席分析能力,助力业务决策!
  8. Unable to connect to Redis无法连接到Redis
  9. eclipse 运行Web项目出现404错误
  10. 极飞科技获科创板首轮问询:累计亏损超过2亿元,计划募资15亿元