EasyPoi的使用案例

导读

在项目中我们经常会遇到Excel文件下载与上传的需求,那么一般都是通过Poi插件来快速实现的,下面介绍常用的做法。

EasyPoi整合SpringBoot 实现Excel文件上传与下载

项目里有个需求,需要实现员工明细列表的查询,并且以Excel文件的方式进行下载并保存到本地。这里就采用EasyPoi来实现。首先导入依赖:

		<!-- easypoi 依赖 -->
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.1.3</version>
        </dependency>

接着对与查询返回的实体类注解,需要导出的字段也就是属性,这里用到@Excel与 @ExcelEntity注解,前一个注解基于简单属性,后一个注解需要注解在类上,同时在类的内部注解@Excle,也就是你想导出的字段。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下面我们编写接口:

	@ApiOperation(value = "导出员工数据")
    @GetMapping(value = "/export",produces = "application/octet-stream")
    public void exportEmployee(HttpServletResponse response){
        // 获取所有员工信息
        List<Employee> employees = employeeService.getEmployee(null);
        // 获取导出参数:文件名、表明、导出文件类型
        ExportParams params = new ExportParams("员工表","员工表", ExcelType.HSSF);
        // 获取工作簿:参数,导出实体类型, 实体集合
        Workbook workbook = ExcelExportUtil.exportExcel(params, Employee.class, employees);
        // 获取字节输出流
        ServletOutputStream out = null;
        try {
            // 流形式
            response.setHeader("content-type","application/octet-stream");
            // 防止中文乱码
            response.setHeader("content-disposition","attachment;filename=" + URLEncoder.encode(
                    "员工表.xls","UTF-8"));
            // 输出流
            out = response.getOutputStream();
            // 写入输出流
            workbook.write(out);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(null != out){
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
@ApiOperation(value = "导入员工数据")
    @PostMapping(value = "/import")
    public RespBean importEmployee(MultipartFile file){
        // 获得输入参数
        ImportParams params = new ImportParams();
        // 去掉标题行
        params.setTitleRows(1);
        List<Nation> nationList = nationService.list();
        List<PoliticsStatus> politicsStatusList = politicsStatusService.list();
        List<Joblevel> joblevelList = joblevelService.list();
        List<Department> departmentList = departmentService.list();
        List<Position> positionList = positionService.list();
        try {
            // 获取员工对象集合
            List<Employee> employees = ExcelImportUtil.importExcel(file.getInputStream(), Employee.class, params);
            employees.forEach(employee -> {
                // 民族 id
                employee.setNationId(nationList.get(nationList.indexOf(new Nation(employee.getNation()
                        .getName()))).getId());
                // 政治面貌 id
                employee.setPoliticId(politicsStatusList.get(politicsStatusList.indexOf(new PoliticsStatus(employee
                        .getPoliticsStatus().getName()))).getId());
                // 职称 id
                employee.setJobLevelId(joblevelList.get(joblevelList.indexOf(new Joblevel(employee.getJoblevel()
                        .getName()))).getId());
                // 部门 id
                employee.setDepartmentId(departmentList.get(departmentList.indexOf(new Department(employee
                        .getDepartment().getName()))).getId());
                // 职位 id
                employee.setPosId(positionList.get(positionList.indexOf(new Position(employee.getPosition()
                        .getName()))).getId());
            });
            // 批量保存
            if(employeeService.saveBatch(employees)){
                return RespBean.success("导入成功!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return RespBean.error("导入失败!");
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值