基于注解玩转excel导出导入.md

Scroll Down

基于注解玩转excel导出导入

demo 请 加入 598347590 技术解决群获取

image-20210108213341573

话不多说 开始




        <!-- 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>

请自行创建项目 我就不一一演示了 代码生成器即可

image-20210108211911625

image-20210108211845614

生成三层架构 完毕后

讲解 @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 "";
    }
}

image-20210108212823080

image-20210108213006165

完结。。。。。