Excel映射到實體-easyexcel工具


來源

項目需要把Excel進行解析,並映射到對象屬性,實現類似Mybatis的ORM的效果。使用的方式是自定義注解+POI,這種方式代碼復雜而且不易於維護。
easyexcel是阿里巴巴開源的一個框架,解決了字段映射問題、OOM問題、使用復雜問題等,總之是一個很方便的工具
GitHub鏈接

使用

添加依賴

<!--添加maven依賴-->
<!--easyexcel-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.1.3</version>
</dependency>
<!--fastjson-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.10</version>
    <scope>provided</scope>
</dependency>

准備excel

准備實體

@Data
public class Student {
    /**
     * 也可以使用@ExcelProperty(index = 2) 指定列數 
     * 官方不建議 index 和 name 同時用,要么一個對象只用index,要么一個對象只用name去匹配
     */
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("學號")
    private String stuId;
    @ExcelProperty("班級")
    private String classId;
}

創建監聽器

public class DemoDataListener extends AnalysisEventListener<Student> {
    private List<Student> list = new LinkedList<Student>();

    /**
     * 這個每一條數據解析都會來調用
     * @param student
     * @param analysisContext
     */
    public void invoke(Student student, AnalysisContext analysisContext) {
        System.out.println("讀取到一條數據 " + JSON.toJSONString(student));
        list.add(student);
    }

    /**
     * 所有數據讀取完了調用
     * @param analysisContext
     */
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("讀取完畢 所有數據  " + JSON.toJSONString(list));
    }
}

讀取

public class Main {
    public static void main(String[] args) {
        String fileName = "D:\\1.xlsx";
        ExcelReader excelReader = EasyExcel.read(fileName, Student.class, new DemoDataListener()).build();
        ReadSheet readSheet = EasyExcel.readSheet(0).build();
        excelReader.read(readSheet);
        // 這里千萬別忘記關閉,讀的時候會創建臨時文件,到時磁盤會崩的
        excelReader.finish();
    }
}

結果

其他問題

如果第一行不是表頭,而是像以下數據怎么辦呢

很簡單只需要設置readSheetheadRowNumber即可

public class Main {
    public static void main(String[] args) {
        String fileName = "D:\\1.xlsx";
        ExcelReader excelReader = EasyExcel.read(fileName, Student.class, new DemoDataListener()).build();
        ReadSheet readSheet = EasyExcel.readSheet(0).headRowNumber(2).build();
        excelReader.read(readSheet);
        // 這里千萬別忘記關閉,讀的時候會創建臨時文件,到時磁盤會崩的
        excelReader.finish();
    }
}

其他復雜表格請參考
官網文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM