国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

EasyExcel復(fù)雜表頭數(shù)據(jù)導(dǎo)入

這篇具有很好參考價值的文章主要介紹了EasyExcel復(fù)雜表頭數(shù)據(jù)導(dǎo)入。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

表頭示例

EasyExcel復(fù)雜表頭數(shù)據(jù)導(dǎo)入,Java開發(fā),學(xué)習(xí)筆記,java,easyexcel

導(dǎo)入代碼

    @Override
    public void importExcel(InputStream inputStream) {
        ItemExcelListener itemExcelListener = new ItemExcelListener();
        EasyExcel.read(inputStream, ImportItem.class, itemExcelListener).headRowNumber(2).sheet().doRead();
    }
@Slf4j
public class ItemExcelListener extends AnalysisEventListener<ImportItem> {
    /**
     * 定義100條數(shù)據(jù)存儲一次,然后清理list,方便內(nèi)存回收
     */
    private static final int BATCH_COUNT = 300;
    /**
     * 記錄導(dǎo)入的總記錄數(shù)
     */
    private Long listSize = 0L;
    /**
     * 緩存的數(shù)據(jù)
     */
    private List<ImportItem> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);

    //標(biāo)記處理第一行表頭
    private boolean firstRowProcessed = true;

    private HashMap<Integer, HashMap<String,String>> dynamicInfoList;

    /**
     * 解析每一行表頭數(shù)據(jù)時調(diào)用
     */
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        // 讀取表頭數(shù)據(jù)并構(gòu)造HashMap
        if (firstRowProcessed){
            HashMap<Integer, HashMap<String, String>> infoList = new HashMap<>();
            for (Map.Entry<Integer, String> entry : headMap.entrySet()){
                Integer key = entry.getKey();
                String value = entry.getValue();
                if (!Objects.equals(value, "固定數(shù)據(jù)")){
                    infoList.put(key,null);
                }
            }
            dynamicInfoList = infoList;
            firstRowProcessed = false;
        }else {
            for (Map.Entry<Integer, String> entry : headMap.entrySet()){
                HashMap<String, String> info = new HashMap<>();
                Integer key = entry.getKey();
                String value = entry.getValue();
                if (dynamicInfoList.containsKey(key)){
                    info.put(value,null);
                    dynamicInfoList.replace(key,info);
                }
            }
        }
    }

    /**
     * 每解析一條數(shù)據(jù)都會調(diào)用一次
     */
    @Override
    public void invoke(ImportItem importItem, AnalysisContext analysisContext) {
        // 獲取實體類中不匹配的數(shù)據(jù)
        ReadRowHolder readRowHolder = analysisContext.readRowHolder();
        Map<Integer, Cell> cellMap = readRowHolder.getCellMap();
        JSONObject dynamicInformation = new JSONObject();
        for (Map.Entry<Integer, Cell> entry : cellMap.entrySet()){
            Integer key = entry.getKey();
            Cell entryValue = entry.getValue();
            if (dynamicInfoList.containsKey(key)){
                String string = JSON.toJSONString(entryValue);
                JSONObject jsonObject = JSON.parseObject(string);
                String value = jsonObject.getString("stringValue");
                HashMap<String, String> info = dynamicInfoList.get(key);
                for (String attribute : info.keySet()) {
                    dynamicInformation.put(attribute,value);
                }
            }
        }
        cachedDataList.add(importItem);
        // 達到BATCH_COUNT了,需要去存儲一次數(shù)據(jù)庫,防止數(shù)據(jù)幾萬條數(shù)據(jù)在內(nèi)存,容易OOM
        if (cachedDataList.size() >= BATCH_COUNT) {
            saveData();
            // 存儲完成清理 list
            cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
        }
    }

    /**
     * 所有數(shù)據(jù)解析完成后調(diào)用
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        if (!cachedDataList.isEmpty()){
            saveData();
            // 存儲完成清理 list
            cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
        }
    }

    public void saveData(){
        //將數(shù)據(jù)存入數(shù)據(jù)庫
    }


}

數(shù)據(jù)導(dǎo)出

參考文章:EasyExcel動態(tài)復(fù)雜表頭導(dǎo)出方法文章來源地址http://www.zghlxwxcb.cn/news/detail-742286.html

到了這里,關(guān)于EasyExcel復(fù)雜表頭數(shù)據(jù)導(dǎo)入的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Java 利用Easyexcel動態(tài)導(dǎo)出表頭列

    Java 利用Easyexcel動態(tài)導(dǎo)出表頭列

    其中 fieldName 為要導(dǎo)出的字段名稱 也就是 數(shù)據(jù)對象 中與之對應(yīng)的字段名稱 headName 為與字段對應(yīng)的表頭(我這里默認用的就是導(dǎo)出表頭集合中字段排序就是導(dǎo)出的表頭排序 如有需要,可以自己定義導(dǎo)出表頭順序) 導(dǎo)出util類,直接上代碼 其中? CellStyle() 是設(shè)置的默認樣式?

    2024年02月11日
    瀏覽(20)
  • 【vue導(dǎo)入導(dǎo)出Excel】vue簡單實現(xiàn)導(dǎo)出和導(dǎo)入復(fù)雜表頭excel表格功能【純前端版本和配合后端版本】

    【vue導(dǎo)入導(dǎo)出Excel】vue簡單實現(xiàn)導(dǎo)出和導(dǎo)入復(fù)雜表頭excel表格功能【純前端版本和配合后端版本】

    前言 這是一個常用的功能,就是導(dǎo)入和導(dǎo)出excel表格 但是時常會遇到一些復(fù)雜表頭的表格導(dǎo)出和導(dǎo)入 比如我這個案例里面的三層表頭的表格。 網(wǎng)上看了下發(fā)現(xiàn)了一個非常簡單導(dǎo)出和導(dǎo)入方法 當(dāng)然這個是純前端的版本,會出現(xiàn)分頁不好下載的情況。所以實際工作中,導(dǎo)出還是

    2024年02月11日
    瀏覽(27)
  • JAVA實現(xiàn)easyExcel批量導(dǎo)入

    JAVA實現(xiàn)easyExcel批量導(dǎo)入

    注解 類型 描述 ExcelProperty 導(dǎo)入 指定當(dāng)前字段對應(yīng)excel中的那一列。可以根據(jù)名字或者Index去匹配。當(dāng)然也可以不寫,默認第一個字段就是index=0,以此類推。千萬注意,要么全部不寫,要么全部用index,要么全部用名字去匹配。千萬別三個混著用,除非你非常了解源代碼中三個

    2024年04月27日
    瀏覽(19)
  • EasyExcel動態(tài)表頭導(dǎo)出(支持多級表頭)

    在很多業(yè)務(wù)場景中,都會應(yīng)用到動態(tài)表頭的導(dǎo)出,也會涉及到多級表頭的導(dǎo)出,如下圖所示 通過EasyExcel,我們可以快速實現(xiàn)這一需求,具體代碼如下 maven依賴 DynamicHeader.java CustomTitleWriteHandler.java CellStyle.java DynamicExcelUtils.java

    2024年02月08日
    瀏覽(20)
  • Java 使用 EasyExcel 實現(xiàn)導(dǎo)入導(dǎo)出(新手篇教程)

    Java 使用 EasyExcel 實現(xiàn)導(dǎo)入導(dǎo)出(新手篇教程)

    官網(wǎng)鎮(zhèn)樓↓,覺得我寫的不好的同學(xué)可以去官網(wǎng)看哦 EasyExcel 示例: 如上一個簡易 Excel 表格,表頭占了兩行,且第三列開始才為有效數(shù)據(jù),那么我們應(yīng)該如何導(dǎo)入? 建造實體類 首先無論是導(dǎo)入還是導(dǎo)出,都需要先建對應(yīng)的實體類 ?如圖所示,因為我的示例 Excel 一共需要讀

    2024年04月17日
    瀏覽(29)
  • Java多例Bean的應(yīng)用場景-easyExcel導(dǎo)入

    Java多例Bean的應(yīng)用場景-easyExcel導(dǎo)入

    有狀態(tài)會話bean :每個用戶有自己特有的一個實例,在用戶的生存期內(nèi),bean保持了用戶的信息,即“有狀態(tài)”;一旦用戶滅亡(調(diào)用結(jié)束或?qū)嵗Y(jié)束),bean的生命期也告結(jié)束。即每個用戶最初都會得到一個初始的bean。 無狀態(tài)會話bean :bean一旦實例化就被加進會話池中,各個

    2023年04月12日
    瀏覽(21)
  • easyExcel模板數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫

    easyExcel模板數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫

    最近項目中需要用到Excel表格的上傳下載功能,于是選擇了EasyExcel這款工具,總的來說非常的好用,下面就做一個簡單的演示。 官方文檔地址 ? EasyExcel · 語雀 Alibaba Easy Excel - 簡單、省內(nèi)存的Java解析Excel工具 | 首頁 pom.xml?中需要添加的依賴 這里用到了? @ExcelProperty ?注解,這

    2023年04月08日
    瀏覽(27)
  • EasyExcel導(dǎo)入和導(dǎo)出數(shù)據(jù)

    EasyExcel導(dǎo)入和導(dǎo)出數(shù)據(jù)

    1.cmtroller 調(diào)用service方法,完成導(dǎo)出 2.service 調(diào)用工具類的方法完成導(dǎo)出 傳入response,標(biāo)題控制類(標(biāo)題名稱,合并的列數(shù)),員工列表,文件名稱,excel的標(biāo)題名稱,要導(dǎo)出的數(shù)據(jù)類 3.工具類中的方法 4.控制標(biāo)題類 這個類控制數(shù)據(jù)之前的顯示內(nèi)容 效果 2022-10-28 亂碼解決 因為文件

    2023年04月09日
    瀏覽(23)
  • EasyExcel 批量導(dǎo)入并校驗數(shù)據(jù)

    EasyExcel 批量導(dǎo)入并校驗數(shù)據(jù)

    EasyExcel 批量導(dǎo)入并校驗數(shù)據(jù) 日期形式的字段因為校驗需要,提供了String類型的字段,再轉(zhuǎn)換賦值給真正的數(shù)據(jù)庫字段對象,如果不考慮校驗問題可直接轉(zhuǎn)換 @ExcelProperty(value = \\\"處罰信息公示日期\\\", index = 5, converter = LocalDateConverter.class) 讀取數(shù)據(jù)后Validation校驗,校驗通過直接保

    2024年02月08日
    瀏覽(16)
  • EasyExcel實現(xiàn)導(dǎo)入+各種數(shù)據(jù)校驗

    EasyExcel實現(xiàn)導(dǎo)入+各種數(shù)據(jù)校驗

    實現(xiàn)的功能 1.導(dǎo)入非xls和xlsx格式的文件 2.導(dǎo)入空數(shù)據(jù)的excel文件 3.數(shù)據(jù)缺失 4.導(dǎo)入的excel文件中有重復(fù)的數(shù)據(jù) 5.導(dǎo)入的excel文件數(shù)據(jù)錯誤 6.導(dǎo)入的模板不是正確模板 前置條件: 1)傳的參數(shù)是 MultipartFile file 2)編寫一個接收excel文件的實體類,保證@ExcelProperty(“表頭1”)中的屬性和

    2024年02月02日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包