本文通过自定义注解实现excel数据导入导出、以及设置excel文件中列数据验证,即用户在excel文件中输入数据时就可以对数据格式验证是否符合,节省了程序中过多的数据验证操作,注解还额外提供了一系列功能请自行查看本文提供代码包含了详细注释

工具类项目链接 项目中有许多工具类用不到的话可以不用关注,重点观看本文讲解的自定义excel注解数据处理,工具类中使用了poi依赖自行添加

        <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>

项目拉取下来之后重点观看以下截图中标识的类

将工具类迁移到自己项目中之后使用工具类下载存在多列联动效果的模板案例如下
实体类使用excel注解标注字段

import java.util.Date;
import java.util.List;
import com.zx.common.annotation.Excel;
import com.zx.common.annotation.Excel.ColumnType;
import com.zx.common.annotation.Excel.Type;
import com.zx.common.annotation.Excels;public  class SysDept {private static final long serialVersionUID = 1L;/** 如实体类中有属性是其他对象,可以用 @Excels 指定该对象里面需要导出或导入属性即可*/@Excels({@Excel(name = "用户名称", targetAttr = "userName", type = Type.EXPORT),@Excel(name = "用户性别", targetAttr = "sex", type = Type.EXPORT)})private SysUser user;/** 部门ID */private Long deptId;/** 父部门ID */private Long parentId;/** 省 */@Excel(name = "省",sort = 1)private String province;/** 市 */@Excel(name = "市",sort = 2)private String city;/** 区 */@Excel(name = "区",sort = 3)private String areg;/** 部门名称 */@Excel(name = "部门名称",sort = 4)private String deptName;/** 联系电话 */@Excel(name = "联系电话",width = 25,checkType = ExcelCheckType.FORMULA,checkDataType = ExcelCheckDataType.FORMULA,formula = ExcelDataCheckFormula.IS_PHONE_FORMULA,errorContent = "请输入正确手机号: 格式为数字类型11位数,不可包含小数点",sort = 5)private String phone;/** 时间 */@Excel(name = "时间", width = 30, dateFormat = "yyyy/MM/dd",checkType = ExcelCheckType.FORMULA,checkDataType = ExcelCheckDataType.FORMULA,formula = ExcelDataCheckFormula.IS_NUMBER_FORMULA,errorContent="请根据格式 yyyy/MM/dd 输入日期,示例: 2012/12/12",sort = 6)private Date createTime;/** 子部门 */private List<SysDept> children = new ArrayList<SysDept>();public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getAreg() {return areg;}public void setAreg(String areg) {this.areg = areg;}public Long getDeptId() {return deptId;}public void setDeptId(Long deptId) {this.deptId = deptId;}public Long getParentId() {return parentId;}public void setParentId(Long parentId) {this.parentId = parentId;}public String getDeptName() {return deptName;}public void setDeptName(String deptName) {this.deptName = deptName;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public Date getCreateTime() {return createTime;}public void setCreateTime(Date createTime) {this.createTime = createTime;}public List<SysDept> getChildren() {return children;}public void setChildren(List<SysDept> children) {this.children = children;}public SysUser getUser(){return user;}public void setUser(SysUser user){this.user = user;}}

后端代码使用案例,浏览器直接访问该接口地址即可下载excel文件

    /*** 下载数据导入模板文件* @return*/@GetMapping("/importTemplate")public void importTemplate(HttpServletRequest request,HttpServletResponse response) {ExcelUtil<SysDept> util = new ExcelUtil<SysDept>(SysDept.class);// 查询所有的省名称List<String> provNameList = new ArrayList<String>();provNameList.add("广东省");provNameList.add("湖南省");// 整理数据,放入一个Map中,mapkey存放父地点,value 存放该地点下的子区域Map<String, List<String>> siteMap = new HashMap<String, List<String>>();siteMap.put("广东省", Lists.newArrayList("广州市", "深圳市"));siteMap.put("深圳市", Lists.newArrayList("光明新区", "宝安区"));siteMap.put("广州市", Lists.newArrayList("天河区", "白云区"));siteMap.put("湖南省", Lists.newArrayList("长沙市", "常德市"));siteMap.put("长沙市", Lists.newArrayList("来安县", "凤阳县"));siteMap.put("常德市", Lists.newArrayList("武陵区", "鼎城区"));Map<Integer, Integer> columnRelationships = new HashMap<>();columnRelationships.put(-1,0); //顶级父级columnRelationships.put(0,1); // 第二级columnRelationships.put(1,2); // 第三级util.importTemplateAndMultiLevelLinkageMenuExcel("excel模板", provNameList,siteMap, columnRelationships,response,request);}

该案例代码最后生成的excel文件模板在拉取的项目中自行查看效果

使用工具类下载无多列联动效果的excel文件案例如下

    @GetMapping("/importTemplate")public void importTemplate(HttpServletResponse response,HttpServletRequest request){ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);util.importTemplateExcel("用户数据",response,request);}

使用工具类导入数据代码案例代码如下
工具类会把excel中数据转化成list集合后续入库操作自行处理

    @PostMapping("/importData")public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception{ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);List<SysUser> userList = util.importExcel(file.getInputStream());

将list数据导出到excel文件下载

    public void export(SysUser user, HttpServletResponse response, HttpServletRequest request){List<SysUser> list = userService.selectUserList(user);ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);util.exportExcel(list, "用户数据",response,request);}

java自定义注解实现excel数据导入导出,设置单元格数据验证与生成省市区多列联动效果相关推荐

  1. java poi-ooxml 3.17 excel通用导入导出

    java 使用poi-ooxml 3.17 excel的通用导入导出,导出的样式未做处理,可自行处理 可以在csdn下载或者在gitHub( https://github.com/aojd/excel ...

  2. ag-grid 中外部编辑数据同步修改table单元格数据,数据实时更新

    ag-grid 中外部编辑数据同步修改table单元格数据 这里只探讨本人已经使用的一个方法 getTags(params).then(res => {console.log(res, '=== ...

  3. 数据库oracle数据导入导出命令,数据库oracle数据导入导出命令

    exp Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成 ...

  4. poi 导出excel实战与word新增行与excel添加背景色与设置单元格边框

    提示:本文尽可能简洁通俗的讲解[poi 导出excel实战] ,如需导入可见文尾 一.导入依赖: <!--Apache poi--><!--xls(03)--><depe ...

  5. JAVA对excle创建、读取、设置单元格颜色、背景色、跨行跨列

    pom.xml依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</a ...

  6. excel 自动换行后批量设置单元格上下边距

    excel 自动换行后 单元格的上下边距挨的很紧,看起来很不舒服 如下图 现在教大家 如何批量设置 单元格中有多行文本后的上下间距,设置成功后 如下图所示: 具体步骤: 1.鼠标悬停在 excel 中 ...

  7. Java导出excel时,分别设置单元格文字颜色

    奇葩需求. 直接上代码.思路来源自贴吧的一个帖子,有兴趣的同志可以百度搜原帖. 原帖为将excel文件直接导出本地存储,我这里改成实现在线导出. public void downloadMode(Ht ...

  8. easypoi导出设置单元格填充颜色

    重点设置在工具类中已标出 public static void exportComplexExcel(TemplateExportParams templatePath, Map<String, ...

  9. mysql数据导入导出 CSV格式_mysql数据一键导出到csv文件

    在数据库中获取数据的结果集,通过fputcsv() 函数将行格式化为 CSV 并写入一个打开的文件. fputcsv('打开的文件','数组数据'),该函数返回写入字符串的长度.若出错,则返回 fal ...

最新文章

  1. c++中explict关键字
  2. Generator + Promises, the best of all worlds in ES6
  3. 操作系统:内存连续分配方式采用的几种算法及各自优劣
  4. php 导入表格数据,PHPExcel 导入Excel数据的方法
  5. 小度拆卸_拆卸invokedynamic
  6. jOOQ类型安全数据库查询教程
  7. ERC223以太坊通证标准
  8. form表单target的用法 替代window.open
  9. Luogu1502 窗口的星星
  10. 使用Python进行局域网传输文件两种方法
  11. 为什么不同文化中都会发现圆形房屋
  12. linux显示一列数据的首尾行,tail从文件内容的尾行开始查看命令
  13. Freemarker 输出 $ 特殊符号
  14. JavaScript---网络编程(8)-DHTML技术演示(1)
  15. HTML如何做一张李白的静夜思,李白《静夜思》配图赏析
  16. SQL 高级教程:SQL BETWEEN 操作符
  17. win10系统下载中文版 64位32位 官方版​
  18. 定义一个矩形类Rectangle:(知识点:对象的创建和使用)
  19. 原来PWM这么简单!通过锯齿波作为载波和调制波经过比较,产生相应的PWM输出波形
  20. UTC秒数转换成时间

热门文章

  1. 远距离蓝牙路由器产品:桂花网Cassia S2000介绍
  2. 秋天SWF生成PDF免费版V1.4
  3. 电子政务信息交换平台与数据中心的构建(转)
  4. dlib.get_frontal_facedetector UINT8 和float格式互相转换
  5. 我上了个假“中台”!
  6. java面试题2021
  7. 手机通用root刷补Magisk教程
  8. ERROR Plumber found unhandled error: Error in plugin gulp-htmlmin
  9. Android高德地图贴合图片完成手绘地图展示
  10. elixir 教程_认识Elixir,Laravel编译资产的方式