easyExcel多sheet页导出

文章介绍了如何在Java中利用EasyExcel库进行多sheet页的Excel导出操作。首先定义了一个公共导出接口,包括获取数据、文件名和实体类的方法。接着创建了学生和老师两个实体类,并实现了导出接口。然后在ExcelUtil工具类中增加了多sheet页导出的方法。最后,在Controller层提供了导出所有sheet页和指定sheet页的接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上篇文章只是对easyExcel简单导出应用,这次做个小升级:

1)支持全部sheet页导出

2)支持需要的sheet页导出

1、公共导出接口类:

public interface ExportInterface {
    List<?> getData();

    String getFileName();

    Class<?> getEntityClazz();
}

2、实体类:上篇文章的学生类继续使用,这次再增加一个老师类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
    @ExcelProperty("老师姓名")
    private String tName;
    @ExcelProperty("老师性别")
    private String tSex;
    @ExcelProperty("老师年龄")
    private String tAge;
    @ExcelProperty("老师住址")
    private String tAddres;
}

3、公共导出接口“学生”实现类:

@Service
public class StudentExportImpl implements ExportInterface {
    @Override
    public List<?> getData() {
        // 模拟根据条件在数据库查询数据
        ArrayList<Student> students = ListUtils.newArrayList();
        for (int i = 0; i < 10; i++) {
            Student student = new Student();
            student.setSName("学生"+i);
            student.setSAge(i+1+"");
            student.setSSex("女");
            student.setSAddres("库房微小差距"+i);
            student.setEnrolTime(new Date());
            students.add(student);
        }
        return students;
    }

    @Override
    public String getFileName() {
        return "学生基本信息";
    }

    @Override
    public Class<?> getEntityClazz() {
        return Student.class;
    }
}

4、公共导出接口“老师”实现类:

@Service
public class TeacherExportImpl implements ExportInterface {
    @Override
    public List<?> getData() {
        // 模拟根据条件在数据库查询数据
        ArrayList<Teacher> teachers = ListUtils.newArrayList();
        for (int i = 0; i < 10; i++) {
            Teacher teacher = new Teacher();
            teacher.setTName("老师"+i);
            teacher.setTAge(i+20+"");
            teacher.setTSex("女");
            teacher.setTAddres("文库发货"+i);
            teachers.add(teacher);
        }
        return teachers;
    }

    @Override
    public String getFileName() {
        return "老师基本信息";
    }

    @Override
    public Class<?> getEntityClazz() {
        return Teacher.class;
    }
}

6、ExcelUtil  增加多sheet页导出方法:

public static void moreSheetExport(List<ExportInterface> exportInterfaces, HttpServletResponse response) {
        response.setStatus(200);
        OutputStream outputStream = null;
        ExcelWriter excelWriter = null;
        String fileName = "导出.xlsx";
        try {
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
            outputStream = response.getOutputStream();
            excelWriter = EasyExcel.write(outputStream).build();

            for (ExportInterface exportInterface : exportInterfaces) {
                WriteSheet writeSheet = EasyExcel.writerSheet(exportInterface.getFileName()).head(exportInterface.getEntityClazz()).build();
                excelWriter.write(exportInterface.getData(), writeSheet);
            }
        } catch (Exception e) {
            System.out.println("导出excel数据异常:"+e);
            throw new RuntimeException(e);
        } finally {
            if (excelWriter != null) {
                excelWriter.finish();
            }
            if (outputStream != null) {
                try {
                    outputStream.flush();
                    outputStream.close();
                } catch (IOException e) {
                    System.out.println("导出excel数据异常:"+e);
                }
            }
        }
    }

7、Controller增加接口:

@Resource
    private List<ExportInterface> exportInterfaces;

    @GetMapping(value = "/allExport")
    public void allExport(HttpServletResponse response){
        ExcelUtil.moreSheetExport(exportInterfaces,response);
    }


    // 支持导出 特定sheet页
    @PostMapping(value = "/moreSheetExport")
    public void moreSheetExport(@RequestBody List<String> needSheetNames, HttpServletResponse response){
        List<ExportInterface> needExportInterface = new ArrayList<>();
        for (ExportInterface exportInterface : exportInterfaces) {
            if(needSheetNames.contains(exportInterface.getFileName())) {
                needExportInterface.add(exportInterface);
            }
        }
        ExcelUtil.moreSheetExport(needExportInterface,response);
    }

对于使用 EasyExcel 进行分 sheet 导出,你可以按照以下步骤进行操作: 1. 导入 EasyExcel 依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.11</version> </dependency> ``` 2. 创建一个 ExcelWriter 对象: ```java String fileName = "path_to_save_file.xlsx"; ExcelWriter excelWriter = EasyExcel.write(fileName).build(); ``` 3. 定义数据模型类,作为每个 sheet 的数据对象: ```java public class DataModel { // 定义需要导出的字段 private String field1; private String field2; // ... // 省略构造函数、getter 和 setter 方法 } ``` 4. 创建sheet,并写入数据: ```java List<DataModel> data = getData(); // 获取数据列表 WriteSheet sheet1 = EasyExcel.writerSheet(0, "Sheet1").head(DataModel.class).build(); excelWriter.write(data, sheet1); // 创建并写入其他 sheet WriteSheet sheet2 = EasyExcel.writerSheet(1, "Sheet2").head(DataModel.class).build(); excelWriter.write(data, sheet2); // ... ``` 5. 写入完成后关闭 ExcelWriter 对象: ```java excelWriter.finish(); ``` 6. 完整的示例代码如下: ```java public class ExcelExportUtil { public static void main(String[] args) { String fileName = "path_to_save_file.xlsx"; ExcelWriter excelWriter = EasyExcel.write(fileName).build(); List<DataModel> data = getData(); WriteSheet sheet1 = EasyExcel.writerSheet(0, "Sheet1").head(DataModel.class).build(); excelWriter.write(data, sheet1); WriteSheet sheet2 = EasyExcel.writerSheet(1, "Sheet2").head(DataModel.class).build(); excelWriter.write(data, sheet2); excelWriter.finish(); } private static List<DataModel> getData() { // 获取数据的逻辑 // ... } } ``` 这样,使用 EasyExcel 就可以实现分 sheet 导出了。你只需要根据你的需求,设置不同的数据对象和 sheet 名称即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值