非常简单的阿里EasyExcel文件导入导出

阿里巴巴easyExcel依赖:

<!--阿里巴巴easyExcel-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.3.2</version>
</dependency>

首先我们做文件导入:

  1.我们创建一个简单的excel文件:

 2. 我们创建一个对象UserDto
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {


    @ExcelProperty(value = "编号")
    private Long id;


    @ExcelProperty(value = "姓名")
    private String username;


    @ExcelProperty(value = "密码")
    private String password;

    @ExcelProperty(value = "手机号码")
    private String phone;
}
3. 我们创建一个监听器
/**
 * 这是自定义的监听器
 */
@Component
public class ExcelListen implements ReadListener<UserDto> {

    private ArrayList<UserDto> oldList = new ArrayList<>();

    private ArrayList<UserDto> newList = new ArrayList<>();


    /**
     * 每读一行触发一次
     * @param userDto
     * @param analysisContext
     */
    @Override
    public void invoke(UserDto userDto, AnalysisContext analysisContext) {
        // 每读一行就给集合里面插入一次
        oldList.add(userDto);
    }

    /**
     * 全部读完以后触发一次
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        newList.clear();
        newList.addAll(oldList);
        oldList.clear();
    }

    /**
     * 将读取到的list返回
     * @return
     */
    public ArrayList getList(){
        return newList;
    }
}

监听器里面我们实现了阿里的ReadListener接口,实现了两个方法,一个是每读一行触发一次,第二个是在读取完以后触发一次,我们可以根据业务需求来进行编写。 我这里只是做一个简单的示例,将读取的内容写了一个方法并返回。

4.接下来就是我们正式的接口,导入文件接口编写
    /**
     * 文件导入
     * @param file
     * @return
     */
    @PostMapping("/excelAdd")
    public ResponseResult lead(@RequestPart MultipartFile file) throws IOException {
        // 拿到文件输入流
        InputStream inputStream = file.getInputStream();
        // 在这里我们要创建一个监听器
        EasyExcel.read(inputStream, UserDto.class,excelListen)
                // 读第一张工作表,是从0开始
                .sheet(0)
                // 列头占一行
                .headRowNumber(1)
                .doRead();
        ArrayList list = excelListen.getList();
        System.out.println(list);

        return new ResponseResult(200,"导入成功");
    }

 具体代码的作用我打了注释,方便大家理解

5.最终我们测试看一下打印结果,是否是我们需要的

  结果正确

接下来我们演示文件导出

1.我们直接编写接口
    @GetMapping("/export")
    public ResponseResult export(HttpServletResponse response) throws IOException {
        // 自己先模拟一个数据集合,里面放我们的UserDto
        ArrayList<UserDto> userDtos = new ArrayList<>(Arrays.asList(new UserDto(1L,"cxx","123","321")));
        // 告诉前端我们返回的是个excel表
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        // 设置字符编码
        response.setCharacterEncoding("utf-8");
        // 文件的名字
        String fileName = URLEncoder.encode("测试数据", "utf-8").replaceAll("\\+", "%20");
        // 响应头
        response.setHeader("Content-disposition","attachment;fileName" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream())
                // 设置表头,我们UserDto打了 @ExcelProperty注解的字段
                .head(UserDto.class)
                .excelType(ExcelTypeEnum.XLSX)
                .sheet("测试数据")
                .doWrite(userDtos);
        return new ResponseResult(200,"导出成功");

    }

  每行代码的作用我都打了注释,方便大家理解

2.我们直接看最终结果

具体业务需要根据我们项目的实际需求,我这里只是做一个大概的演示噢 

猜你喜欢

转载自blog.csdn.net/m0_53464000/article/details/132559520