easyexcel讀取


pom依賴,easyexcel是必須的,lombok非必須,它可以在實體類上使用@Data注釋,無需生成get、set方法

    <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <scope>provided</scope>
        </dependency>

  實體類

public class Province {

    @ExcelProperty(index = 0)
    private Long provinceId;

    @ExcelProperty(index = 1)
    private String provinceName;

    @ExcelProperty(index = 2)
    private Long cityId;

    @ExcelProperty(index = 3)
    private String cityName;

    public Long getCityId() {
        return cityId;
    }

    public void setCityId(Long cityId) {
        this.cityId = cityId;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public Long getProvinceId() {
        return provinceId;
    }

    public void setProvinceId(Long provinceId) {
        this.provinceId = provinceId;
    }

    public String getProvinceName() {
        return provinceName;
    }

    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }
}

  excel監聽器(需注意的是,要將dao傳入進去,也就是每一個監聽器只操作一種類型的

/**
 * 使用EasyExcel處理excel文件
 * @Version 1.0.0
 * @Description
 */
public class ProvinceExcelListener extends AnalysisEventListener<Province> {

    private ProvinceMapper provinceMapper;

    /**
     * 批處理閾值
     */
    private static final int BATCH_COUNT = 1000;
    List<Province> list = new ArrayList<Province>(BATCH_COUNT); //存放數據

    public ProvinceExcelListener(ProvinceMapper provinceMapper){
        this.provinceMapper = provinceMapper;
    }

    @Override
    public void invoke(Province province, AnalysisContext context) {
        list.add(province);
        //內存存放超過多少條數據,則先存放到數據庫中;保存完后,清空內存
        if(list.size() >= BATCH_COUNT){
            long beforeTime = System.currentTimeMillis();
            saveData();
            list.clear();//清空內存
            System.out.println("處理1000數據所需的時間:"+(System.currentTimeMillis()-beforeTime));
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
      saveData();//解析完成后需要調用一次,不大於BATCH_COUNT就沒處理
    }

    /**
     * 保存數據
     */
    private void saveData(){
        for(Province province : list){
            provinceMapper.add(province);
        }
    }
}

  測試類

@Test
    void contextLoads()throws Exception {

        String fileName = "C:/Users/zwk/Desktop/工作簿1.xlsx";
        long beforeTime = System.currentTimeMillis();
        EasyExcel.read(fileName,Province.class,new ProvinceExcelListener(provinceMapper)).sheet().doRead();
        System.out.println("讀取數據所花的時間:"+(System.currentTimeMillis()-beforeTime)+"毫秒");
    }

  注:空的也能讀取,不用特殊處理

 


免責聲明!

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



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