java使用easyexcel实现Excel下载

java使用easyexcel实现Excel下载

  1. pom添加依赖

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.2.10</version>
    </dependency>
    
  2. 简单场景下载

    public File generateFile(Map<String, List<Data>> dataListMap, String filename) {
        ExcelWriter writer = EasyExcelFactory.write(filename).build();
        dataListMap.forEach((sheetName, record) -> {
            WriteSheet writeSheet = EasyExcelFactory.writerSheet(sheetName).head(Data.class).build();
            writer.write(record, writeSheet);
        });
        writer.finish();
        return new File(filename);
    }
    
    public class Data {
    
        @JsonProperty
        @ExcelProperty(index = 0, value = "ID")
        public int id;
    
        @JsonProperty
        @ExcelProperty(index = 1, value = "姓名")
        public String name;
    
        @JsonProperty
        @ExcelProperty(index = 2, value = "年龄")
        public Integer age;
    
        // get set
        ...
    }
    
    public static void main(String[] args) {
        String filename = "导出文件.xlsx";
        Map<String, List<Data>> dataListMap = new HashMap<>();
        dataListMap.put("一组", mockDataList());
        dataListMap.put("二组", mockDataList());
        ExcelUtil excelUtil = new ExcelUtil();
        File file = excelUtil.generateFile(dataListMap, filename);
        Resource resource = new FileSystemResource(file);
    }
    
    private static List<Data> mockDataList() {
        ...
    }
    

    在这里插入图片描述

  3. 多层数据结构下载

    public File generateFile(Map<String, List<Data>> dataListMap, String filename) {
        ExcelWriter writer = EasyExcelFactory.write(filename).build();
        dataListMap.forEach((sheetName, record) -> {
            WriteSheet writeSheet = EasyExcelFactory.writerSheet(sheetName).needHead(Boolean.FALSE).build();
            for (int i = 0; i < record.size(); i++) {
                Data data = record.get(i);
                WriteTable table1 = EasyExcelFactory.writerTable(i * 2)
                        .needHead(Boolean.TRUE)
                        .head(Data.class)
                        .build();
                writer.write(Collections.singletonList(data), writeSheet, table1);
    
                if (CollectionUtils.isEmpty(data.getInnerDataList())) {
                    WriteTable table2 = EasyExcelFactory.writerTable(i * 2 + 1)
                            .needHead(Boolean.FALSE)
                            .build();
                    writer.write(data.getInnerDataList(), writeSheet, table2);
                } else {
                    WriteTable table2 = EasyExcelFactory.writerTable(i * 2 + 1)
                            .needHead(Boolean.TRUE)
                            .head(Data.InnerData.class)
                            .build();
                    writer.write(data.getInnerDataList(), writeSheet, table2);
                }
            }
        });
        writer.finish();
        return new File(filename);
    }
    
    public class Data {
    
        @JsonProperty
        @ExcelProperty(index = 0, value = "ID")
        public int id;
    
        @JsonProperty
        @ExcelProperty(index = 1, value = "姓名")
        public String name;
    
        @JsonProperty
        @ExcelProperty(index = 2, value = "年龄")
        public Integer age;
    
        @ExcelIgnore
        public List<InnerData> innerDataList;
    
        // get set
        ...
    
        public static class InnerData {
    
            @JsonProperty
            @ExcelProperty(index = 1, value = "ID")
            public int id;
    
            @JsonProperty
            @ExcelProperty(index = 2, value = "日期")
            public String date;
    
            @JsonProperty
            @ExcelProperty(index = 3, value = "出单量")
            public Integer count;
    
            // get set
            ...
        }
    }
    
    public static void main(String[] args) {
        String filename = "导出文件.xlsx";
        Map<String, List<Data>> dataListMap = new HashMap<>();
        dataListMap.put("一组", mockDataList());
        dataListMap.put("二组", mockDataList());
        ExcelUtil excelUtil = new ExcelUtil();
        File file = excelUtil.generateFile(dataListMap, filename);
        Resource resource = new FileSystemResource(file);
    }
    
    private static List<Data> mockDataList() {
        ...
    }
    

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EasyExcel是一款基于Java语言的开源Excel解析工具,可以帮助我们快速、高效地读取和写入Excel文件。下面是使用EasyExcel实现Excel读取的简单示例: 1. 添加EasyExcel依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.6</version> </dependency> ``` 2. 定义Excel实体类 我们需要定义一个Java类来表示Excel中的一行数据,类中的属性对应Excel中的列。 例如,我们有一个Excel表格,包含姓名、年龄、性别三列,那么我们可以定义一个如下的实体类: ``` public class Student { private String name; private int age; private String gender; // getter、setter方法省略 } ``` 3. 使用EasyExcel读取Excel文件 使用EasyExcel读取Excel文件非常简单,只需要实现一个监听器类,并调用EasyExcel读取方法即可。 例如,我们有一个名为"students.xlsx"的Excel文件,包含一个名为"Sheet1"的工作表,我们可以使用如下代码来读取Excel文件: ``` public class ExcelReader { public static void main(String[] args) { String fileName = "students.xlsx"; String sheetName = "Sheet1"; EasyExcel.read(fileName, Student.class, new ExcelListener()) .sheet(sheetName) .doRead(); } } public class ExcelListener extends AnalysisEventListener<Student> { @Override public void invoke(Student student, AnalysisContext analysisContext) { // 处理每一行数据 } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 处理完所有数据后的操作 } } ``` 在上面的代码中,ExcelListener是一个监听器类,继承自AnalysisEventListener,其中的invoke()方法会在每读取一行数据时被调用,doAfterAllAnalysed()方法会在读取完所有数据后被调用。 通过调用EasyExcel.read()方法,我们可以指定要读取的Excel文件名、工作表名和实体类类型,然后调用sheet()方法指定要读取的工作表名,最后调用doRead()方法开始读取Excel文件。 在invoke()方法中,我们可以获取到当前行的数据,可以根据需要对其进行处理。在doAfterAllAnalysed()方法中,我们可以在所有数据读取完后进行一些操作,例如关闭资源等。 以上就是使用EasyExcel实现Excel读取的简单示例,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值