基于注解玩转excel导出导入
话不多说 开始
<!-- poi office --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.13</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.13</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.13</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.0</version> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> </dependency>
请自行创建项目 我就不一一演示了 代码生成器即可
生成三层架构 完毕后
讲解 @ExcelField 注解
/** * Excel注解定义 自定义注解 注入到实体类顶部 用于指定实体类的导出 * @author yangbuyi * @version 2021-1-8 */ @Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface ExcelField { /** * 导出字段名(默认调用当前字段的“get”方法,如指定导出字段为对象,请填写“对象名.对象属性”,例:“area.name”、“office.name”) */ String value() default ""; /** * 导出字段标题(需要添加批注请用“**”分隔,标题**批注,仅对导出模板有效) */ String title(); /** * 字段类型(0:导出导入;1:仅导出;2:仅导入) */ int type() default 0; /** * 导出字段对齐方式(0:自动;1:靠左;2:居中;3:靠右) */ int align() default 0; /** * 导出字段字段排序(升序) */ int sort() default 0; /** * 如果是字典类型,请设置字典的type值 */ String dictType() default ""; /** * 反射类型 */ Class<?> fieldType() default Class.class; /** * 字段归属组(根据分组导出导入) */ int[] groups() default {}; }
基本用法
title: 导出的单元格标题 aling: 对齐格式 0:自动;1:靠左;2:居中;3:靠右 sort[重要]: 导出的字段顺序 别重复哦 会覆盖 @ExcelField(title = "管理员", align = 2, sort = 1) private String name;
这里定义完毕之后 在controller 调用即可
创建controller 访问
package top.yangbuyi.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import top.yangbuyi.common.excel.ExportExcel; import top.yangbuyi.domain.User; import top.yangbuyi.service.UserService; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Date; import java.util.List; /** * ClassName: excelController * * @author yangshuai * @Date: 2020-12-28 13:31 * @Description: $ **/ @RestController public class excelController { @Resource private UserService userService; @Resource HttpServletResponse httpServletResponse; @Resource HttpServletRequest httpServletRequest; /** * @功能描述:导出 * @Date: 2020-12-28 13:33 */ @GetMapping public String excel() { try { String fileName = "测试" + new Date() + ".xlsx"; // 获取list集合数据 List<User> list = this.userService.list(); // 直接输出 new ExportExcel("测试", User.class).setDataList(list).write(httpServletResponse, fileName, httpServletRequest).dispose(); } catch (Exception e) { log.error("测试: {}", e); } return ""; } }
完结。。。。。