最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

阿里的Easyexcel讀取Excel文件的方法(最新版本)

 更新時(shí)間:2022年12月16日 11:00:39   作者:KANLON  
這篇文章主要介紹了阿里的Easyexcel讀取Excel文件(最新版本)的方法,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

  本篇文章主要介紹一下使用阿里開源的Easyexcel工具處理讀取excel文件,因?yàn)橹白约合朐诰W(wǎng)上找一下這個(gè)簡單的立即上手的博客,發(fā)現(xiàn)很多文章的教程都針對比較舊的版本的Easyexcel,沒有使用新版本的方法,導(dǎo)致很多方法都標(biāo)志過期了或者運(yùn)行時(shí)報(bào)錯(cuò),所以本篇博客主要是使用最新版的Easyexcel去讀取excel文件,順便說一下目前新版本的特性。

優(yōu)化

  • 目前讀取excel文件不再需要指定ExcelTypeEnum,即excel的版本,會自動處理
  • 之前創(chuàng)建ExcelReader都是自己new,現(xiàn)在是通過EasyExcelFactory創(chuàng)建,更加簡單和具備通用性。
  • 之前每解析一行的回調(diào)的invoke()方法,通用對象Object是list集合,目前是HashMap集合。

debug查看實(shí)際注入的值

簡單使用讀取Excel,返回List集合

通過maven引入依賴

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.0.5</version>
        </dependency>

新建通用監(jiān)聽類StringExcelListener

    /**
     * StringList 解析監(jiān)聽器
     *
     * @author zhangcanlong
     * @since 2019-10-21
     */
    private static class StringExcelListener extends AnalysisEventListener {

        /**
         * 自定義用于暫時(shí)存儲data
         * 可以通過實(shí)例獲取該值
         */
        private List<List<String>> datas = new ArrayList<>();

        /**
         * 每解析一行都會回調(diào)invoke()方法
         *
         * @param object  讀取后的數(shù)據(jù)對象
         * @param context 內(nèi)容
         */
        @Override
        public void invoke(Object object, AnalysisContext context) {
            @SuppressWarnings("unchecked") Map<String, String> stringMap = (HashMap<String, String>) object;
            //數(shù)據(jù)存儲到list,供批量處理,或后續(xù)自己業(yè)務(wù)邏輯處理。
            datas.add(new ArrayList<>(stringMap.values()));
            //根據(jù)自己業(yè)務(wù)做處理
        }

        @Override
        public void doAfterAllAnalysed(AnalysisContext context) {
            //解析結(jié)束銷毀不用的資源
            //注意不要調(diào)用datas.clear(),否則getDatas為null
        }

        /**
         * 返回?cái)?shù)據(jù)
         *
         * @return 返回讀取的數(shù)據(jù)集合
         **/
        public List<List<String>> getDatas() {
            return datas;
        }

        /**
         * 設(shè)置讀取的數(shù)據(jù)集合
         *
         * @param datas 設(shè)置讀取的數(shù)據(jù)集合
         **/
        public void setDatas(List<List<String>> datas) {
            this.datas = datas;
        }
    }

創(chuàng)建ExcelReader讀取,并從監(jiān)聽類中獲取讀取的數(shù)據(jù)

    /**
     * 根據(jù)excel輸入流,讀取excel文件
     *
     * @param inputStream exece表格的輸入流
     * @return 返回雙重list的集合
     **/
    public List<List<String>> writeWithoutHead(InputStream inputStream) {
        StringExcelListener listener = new StringExcelListener();
        ExcelReader excelReader = EasyExcelFactory.read(inputStream, null, listener).headRowNumber(0).build();
        excelReader.read();
        List<List<String>> datas = listener.getDatas();
        excelReader.finish();
        return datas;
    }

完整的Excel簡單讀取類和測試

測試類:

import com.hiido.services.common.ExcelOptionsService;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

/**
 * excel操作的測試類
 *
 * @author zhangcanlong
 * @since 2019/10/20 21:12
 **/
@RunWith(SpringRunner.class)
@SpringBootTest
public class ExcelOptionsServiceTest {

    @Autowired
    private ExcelOptionsService excelOptionsService;

    /**
     * 測試讀取excel
     **/
    @Test
    public void testReadExcel() {
        // 這里的excel文件可以 為xls或xlsx結(jié)尾
        File file = new File("C:\\Users\\Administrator\\Desktop\\測試.xls");
        List<List<String>> result = new ArrayList<>();
        try {
            result = excelOptionsService.writeWithoutHead(new FileInputStream(file));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        Assert.assertNotNull(result);
        System.out.println("讀取結(jié)果:" + result);
    }
}


讀取類

import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import org.springframework.stereotype.Service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * excel文件的操作service
 *
 * @author zhangcanlong
 * @since 2019/10/20 21:01
 **/
@Service
public class ExcelOptionsService {

    /**
     * 根據(jù)excel輸入流,讀取excel文件
     *
     * @param inputStream exece表格的輸入流
     * @return 返回雙重list的集合
     **/
    public List<List<String>> writeWithoutHead(InputStream inputStream) {
        StringExcelListener listener = new StringExcelListener();
        ExcelReader excelReader = EasyExcelFactory.read(inputStream, null, listener).headRowNumber(0).build();
        excelReader.read();
        List<List<String>> datas = listener.getDatas();
        excelReader.finish();
        return datas;
    }

    /**
     * StringList 解析監(jiān)聽器
     *
     * @author zhangcanlong
     * @since 2019-10-21
     */
    private static class StringExcelListener extends AnalysisEventListener {

        /**
         * 自定義用于暫時(shí)存儲data
         * 可以通過實(shí)例獲取該值
         */
        private List<List<String>> datas = new ArrayList<>();

        /**
         * 每解析一行都會回調(diào)invoke()方法
         *
         * @param object  讀取后的數(shù)據(jù)對象
         * @param context 內(nèi)容
         */
        @Override
        public void invoke(Object object, AnalysisContext context) {
            @SuppressWarnings("unchecked") Map<String, String> stringMap = (HashMap<String, String>) object;
            // 這里可以獲取excel的基本信息,包含excel的總行數(shù)
            System.out.println("不一定十分準(zhǔn)確的總行數(shù):"+context.getTotalCount());
            //數(shù)據(jù)存儲到list,供批量處理,或后續(xù)自己業(yè)務(wù)邏輯處理。
            datas.add(new ArrayList<>(stringMap.values()));
            //根據(jù)自己業(yè)務(wù)做處理
        }

        @Override
        public void doAfterAllAnalysed(AnalysisContext context) {
            //解析結(jié)束銷毀不用的資源
            //注意不要調(diào)用datas.clear(),否則getDatas為null
        }

        /**
         * 返回?cái)?shù)據(jù)
         *
         * @return 返回讀取的數(shù)據(jù)集合
         **/
        public List<List<String>> getDatas() {
            return datas;
        }

        /**
         * 設(shè)置讀取的數(shù)據(jù)集合
         *
         * @param datas 設(shè)置讀取的數(shù)據(jù)集合
         **/
        public void setDatas(List<List<String>> datas) {
            this.datas = datas;
        }
    }
}


注意

如果在正式項(xiàng)目中使用的,要修改一些東西的,我這個(gè)只是demo,我為了方便把StringExcelListener 放到內(nèi)部類了,應(yīng)該把這個(gè)類抽出來作為單獨(dú)一個(gè)service類的

參考資料:

https://blog.csdn.net/alinyua/article/details/82859577 

https://github.com/alibaba/easyexcel/blob/master/quickstart.md

到此這篇關(guān)于阿里的Easyexcel讀取Excel文件(最新版本)的文章就介紹到這了,更多相關(guān)阿里的Easyexcel讀取Excel文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot?jackson提供對LocalDate的支持方式

    SpringBoot?jackson提供對LocalDate的支持方式

    這篇文章主要介紹了SpringBoot?jackson提供對LocalDate的支持方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 如何通過eclipse web項(xiàng)目導(dǎo)入itellij idea并啟動

    如何通過eclipse web項(xiàng)目導(dǎo)入itellij idea并啟動

    這篇文章主要介紹了如何通過eclipse web項(xiàng)目導(dǎo)入itellij idea并啟動,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • SpringBoot如何使用ApplicationContext獲取bean對象

    SpringBoot如何使用ApplicationContext獲取bean對象

    這篇文章主要介紹了SpringBoot 如何使用ApplicationContext獲取bean對象,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Springboot 配置RabbitMQ文檔的方法步驟

    Springboot 配置RabbitMQ文檔的方法步驟

    這篇文章主要介紹了Springboot 配置RabbitMQ文檔的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java中toString()、String.valueOf、(String)強(qiáng)轉(zhuǎn)區(qū)別

    Java中toString()、String.valueOf、(String)強(qiáng)轉(zhuǎn)區(qū)別

    相信大家在日常開發(fā)中這三種方法用到的應(yīng)該很多,本文主要介紹了Java中toString()、String.valueOf、(String)強(qiáng)轉(zhuǎn)區(qū)別,感興趣的可以了解一下
    2021-09-09
  • SpringBoot詳解Banner的使用

    SpringBoot詳解Banner的使用

    這篇文章主要介紹了超個(gè)性修改SpringBoot項(xiàng)目的啟動banner的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Spring boot中自定義Json參數(shù)解析器的方法

    Spring boot中自定義Json參數(shù)解析器的方法

    這篇文章主要介紹了Spring boot中自定義Json參數(shù)解析器的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Java Classloader機(jī)制用法代碼解析

    Java Classloader機(jī)制用法代碼解析

    這篇文章主要介紹了Java Classloader機(jī)制用法代碼解析,涉及JDK默認(rèn)ClassLoader,雙親委托模型,自定義ClassLoader等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • java正則表達(dá)式簡單使用和網(wǎng)頁爬蟲的制作代碼

    java正則表達(dá)式簡單使用和網(wǎng)頁爬蟲的制作代碼

    java正則表達(dá)式簡單使用和網(wǎng)頁爬蟲的制作代碼,需要的朋友可以參考一下
    2013-05-05
  • Java實(shí)現(xiàn)發(fā)送手機(jī)短信語音驗(yàn)證功能代碼實(shí)例

    Java實(shí)現(xiàn)發(fā)送手機(jī)短信語音驗(yàn)證功能代碼實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)發(fā)送手機(jī)短信語音驗(yàn)證功能代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評論

米脂县| 八宿县| 徐水县| 岐山县| 丁青县| 淮安市| 炉霍县| 平定县| 德清县| 灵璧县| 贡嘎县| 阿尔山市| 布尔津县| 余庆县| 商南县| 沽源县| 郎溪县| 靖西县| 香河县| 肃宁县| 奎屯市| 玉溪市| 内江市| 通城县| 平远县| 越西县| 昌邑市| 铁岭市| 定边县| 万盛区| 阳信县| 清徐县| 大埔区| 宾阳县| 临西县| 宜州市| 安庆市| 彰武县| 始兴县| 军事| 湘阴县|