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

使用EasyExcel實(shí)現(xiàn)excel導(dǎo)出,支持百萬大數(shù)據(jù)量導(dǎo)出-----超簡單

這篇具有很好參考價(jià)值的文章主要介紹了使用EasyExcel實(shí)現(xiàn)excel導(dǎo)出,支持百萬大數(shù)據(jù)量導(dǎo)出-----超簡單。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

通過設(shè)置sheet數(shù)量,完成分批導(dǎo)出,每個(gè)sheet存100萬數(shù)據(jù),每次查詢插入20萬數(shù)據(jù),避免超時(shí),內(nèi)存溢出等問題,可以根據(jù)服務(wù)器配置調(diào)整參數(shù)設(shè)置。
1.引入依賴

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

2.創(chuàng)建對應(yīng)的實(shí)體類
@ExcelProperty設(shè)置的就是導(dǎo)出的列名,還可以設(shè)置排序等等

@Data
@NoArgsConstructor
@AllArgsConstructor
public class AltitudeMonExportExcelVO implements Serializable {

    @ExcelProperty(value = "站名")
    private String cname;

    @ExcelProperty(value = "站號")
    private String v01301;

    @ExcelProperty(value = "月平均氣溫(氣溫)")
    private String v12001_701="0";

    @ExcelProperty(value = "月平均氣壓")
    private String v10004_701="0";

    @ExcelProperty(value = "月平均相對濕度(相對濕度)")
    private String v13003_701="0";

    @ExcelProperty(value = "月平均溫度露點(diǎn)差(露點(diǎn)溫度)")
    private String v12301_701="0";
}

3.核心導(dǎo)出代碼

public void exportSurfList2(StatisticsRequestVo requestVo,HttpServletResponse response) throws IOException {
        log.info("*********地面統(tǒng)計(jì)查詢列表導(dǎo)出開始!**************");
        //文件名
        String fileName =String.valueOf(System.currentTimeMillis());

        OutputStream outputStream =null;
        try {
            //記錄總數(shù):實(shí)際中需要根據(jù)查詢條件進(jìn)行統(tǒng)計(jì)即可:一共多少條
            int totalCount=mapper.seleCount();
            //每一個(gè)Sheet存放100w條數(shù)據(jù)
            Integer sheetDataRows = ExcelConstants.PER_SHEET_ROW_COUNT;
            //每次寫入的數(shù)據(jù)量20w,每頁查詢20W
            Integer writeDataRows = ExcelConstants.PER_WRITE_ROW_COUNT;
            //計(jì)算需要的Sheet數(shù)量
            Integer sheetNum = totalCount % sheetDataRows == 0 ? (totalCount / sheetDataRows) : (totalCount / sheetDataRows + 1);
            //計(jì)算一般情況下每一個(gè)Sheet需要寫入的次數(shù)(一般情況不包含最后一個(gè)sheet,因?yàn)樽詈笠粋€(gè)sheet不確定會寫入多少條數(shù)據(jù))
            Integer oneSheetWriteCount = sheetDataRows / writeDataRows;
            //計(jì)算最后一個(gè)sheet需要寫入的次數(shù)
            Integer lastSheetWriteCount = totalCount % sheetDataRows == 0 ? oneSheetWriteCount : (totalCount % sheetDataRows % writeDataRows == 0 ? (totalCount / sheetDataRows / writeDataRows) : ((totalCount % sheetDataRows)+ / writeDataRows + 1));
            outputStream = response.getOutputStream();
            //必須放到循環(huán)外,否則會刷新流
            ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
            //開始分批查詢分次寫入
            for (int i = 0; i < sheetNum; i++) {
                //創(chuàng)建Sheet
                WriteSheet sheet = new WriteSheet();
                sheet.setSheetName("Sheet"+i);
                sheet.setSheetNo(i);
                //循環(huán)寫入次數(shù): j的自增條件是當(dāng)不是最后一個(gè)Sheet的時(shí)候?qū)懭氪螖?shù)為正常的每個(gè)Sheet寫入的次數(shù),如果是最后一個(gè)就需要使用計(jì)算的次數(shù)lastSheetWriteCount
                for (int j = 0; j < (i != sheetNum - 1 ? oneSheetWriteCount : lastSheetWriteCount); j++) {
                    //分頁查詢一次20w
                    Page page1 = new Page(j + 1 + oneSheetWriteCount * i, writeDataRows);
                    //查詢分頁列表---按照自己的業(yè)務(wù)查列表,分頁這個(gè)一定要使用這個(gè):page1.getPageNum(),page1.getPageSize()?。?!
                    List<Map<String, Object>> list = mapper.selectList(page1.getPageNum(),page1.getPageSize());
                    List<AltitudeMonExportExcelVO > SurfDayList = new ArrayList<>();
                   //寫入到excel:
                    /**************z只需要選擇一種方式即可*****************/
                    //這里可以通過設(shè)置includeColumnFiledNames、excludeColumnFiledNames導(dǎo)出什么字段,可以動態(tài)配置,前端傳過來那些列,就導(dǎo)出那些列
                    //方式1、只導(dǎo)出v01301這一列
                    Set<String> includeColumnFiledNames = new HashSet<String>();
                    includeColumnFiledNames.add("v01301");
                    WriteSheet writeSheet = EasyExcel.writerSheet(i, "Sheet" + (i + 1)).head(AltitudeMonExportExcelVO.class).includeColumnFiledNames(includeColumnFiledNames)
                            .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
                    //方式2、排除v01301這一列,其他的全部導(dǎo)出
                    Set<String> excludeColumnFiledNames = new HashSet<String>();
                    excludeColumnFiledNames.add("v01301");
                    WriteSheet writeSheet = EasyExcel.writerSheet(i, "Sheet" + (i + 1)).head(AltitudeMonExportExcelVO.class).excludeColumnFiledNames(includeColumnFiledNames)
                            .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
                    excelWriter.write(list, writeSheet);
                    //方式3、不做設(shè)置,全部導(dǎo)出
                    WriteSheet writeSheet = EasyExcel.writerSheet(i, "Sheet" + (i + 1)).head(AltitudeMonExportExcelVO.class)
                            .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
                    excelWriter.write(list, writeSheet);
                }
            }
            // 下載EXCEL,返回給前段stream流
            response.setContentType("application/octet-stream");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
            excelWriter.finish();
            outputStream.flush();
            outputStream.close();
            log.info("*********地面統(tǒng)計(jì)查詢列表導(dǎo)出結(jié)束!**************");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (outputStream != null) {
                outputStream.close();
            }
        }

    }

4.配置類

public class ExcelConstants {
    //一個(gè)sheet裝100w數(shù)據(jù)
    public static final Integer PER_SHEET_ROW_COUNT = 1000000;
    //每次查詢20w數(shù)據(jù),每次寫入20w數(shù)據(jù)
    public static final Integer PER_WRITE_ROW_COUNT = 200000;
}

至此就完成導(dǎo)出。文章來源地址http://www.zghlxwxcb.cn/news/detail-504373.html

到了這里,關(guān)于使用EasyExcel實(shí)現(xiàn)excel導(dǎo)出,支持百萬大數(shù)據(jù)量導(dǎo)出-----超簡單的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 使用EasyExcel實(shí)現(xiàn)Excel表格的導(dǎo)入導(dǎo)出

    使用EasyExcel實(shí)現(xiàn)Excel表格的導(dǎo)入導(dǎo)出

    Java解析、生成Excel比較有名的框架有Apache poi、jxl。但他們都存在一個(gè)嚴(yán)重的問題就是非常的耗內(nèi)存,poi有一套SAX模式的API可以一定程度的解決一些內(nèi)存溢出的問題,但POI還是有一些缺陷,比如07版Excel解壓縮以及解壓后存儲都是在內(nèi)存中完成的,內(nèi)存消耗依然很大。 easyexcel重

    2024年02月12日
    瀏覽(18)
  • 使用easyexcel填充模板數(shù)據(jù),并導(dǎo)出excel

    使用easyexcel填充模板數(shù)據(jù),并導(dǎo)出excel

    導(dǎo)出excel功能非常場景,本片文章記錄如何使用模板填充數(shù)據(jù)后再導(dǎo)出。因直接導(dǎo)出excel數(shù)據(jù)樣式不符合要求,所以做了模板填充然后再導(dǎo)出excel。 效果如下: 注意:列表數(shù)據(jù)變量名前面要寫點(diǎn){.id},如果單條數(shù)據(jù)可以不寫。 使用表單提交: 實(shí)體代碼: controller代碼: 只對je

    2024年03月11日
    瀏覽(23)
  • java實(shí)現(xiàn)excel的導(dǎo)出之使用easyExcel

    java實(shí)現(xiàn)excel的導(dǎo)出之使用easyExcel

    在我們的項(xiàng)目需求中,經(jīng)常會遇到導(dǎo)出的需求,其中excel的導(dǎo)出最為常見。生成Excel比較有名的框架有Apache poi,jxl等,但他們都存在一個(gè)嚴(yán)重的問題就是非常的耗內(nèi)存,如果你的系統(tǒng)并發(fā)量不大的話可能還行,但是一旦并發(fā)上來后一定會OOM或者JVM頻繁的full gc. EasyExcel是阿里巴巴

    2024年02月15日
    瀏覽(23)
  • springboot中使用EasyExcel實(shí)現(xiàn)Excel 導(dǎo)入導(dǎo)出

    springboot中使用EasyExcel實(shí)現(xiàn)Excel 導(dǎo)入導(dǎo)出

    EasyExcel 是一款基于 Java 的簡單易用的 Excel 文件操作工具。它提供了豐富的 API,可以方便地讀取、寫入和操作 Excel 文件,支持常見的 Excel 操作,如讀取/寫入單元格數(shù)據(jù)、合并單元格、設(shè)置樣式、處理大數(shù)據(jù)量等。EasyExcel能大大減少占用內(nèi)存的主要原因是在解析Excel時(shí)沒有將

    2024年02月12日
    瀏覽(39)
  • 積木報(bào)表Excel數(shù)據(jù)量大導(dǎo)出慢導(dǎo)不出問題、大量數(shù)據(jù)導(dǎo)不出問題優(yōu)化方案和分析解決思路(優(yōu)化前一萬多導(dǎo)出失敗,優(yōu)化后支持百萬級跨庫表導(dǎo)出)

    積木報(bào)表Excel數(shù)據(jù)量大導(dǎo)出慢導(dǎo)不出問題、大量數(shù)據(jù)導(dǎo)不出問題優(yōu)化方案和分析解決思路(優(yōu)化前一萬多導(dǎo)出失敗,優(yōu)化后支持百萬級跨庫表導(dǎo)出)

    原積木導(dǎo)出有兩種導(dǎo)出,直接導(dǎo)出和大數(shù)據(jù)導(dǎo)出(大數(shù)據(jù)導(dǎo)出是做了優(yōu)化去掉了一些樣式之類的,性能更好) 實(shí)測中發(fā)現(xiàn) 原積木大數(shù)據(jù)導(dǎo)出性能:1萬條數(shù)據(jù)導(dǎo)出耗時(shí)30秒,1.5萬條耗時(shí)1.5分鐘導(dǎo)出失敗,數(shù)據(jù)超過一萬條后經(jīng)常導(dǎo)出失敗,還會導(dǎo)致容器實(shí)例探活失敗/內(nèi)存撐爆重

    2024年04月11日
    瀏覽(68)
  • 使用POI和EasyExcel來實(shí)現(xiàn)excel文件的導(dǎo)入導(dǎo)出

    使用POI和EasyExcel來實(shí)現(xiàn)excel文件的導(dǎo)入導(dǎo)出

    廢話不多說咱們直接上干貨?。。?! 一.讀取Excel表格 【1】使用POI讀取excel表格中的數(shù)據(jù) POI還可以操作我們這個(gè)word文檔等等,他不僅僅只能弄Excel,而JXI只能操作excel 1.POI的結(jié)構(gòu),我們可以更具文件的類去選擇 相關(guān)的對象我當(dāng)前是使用的XLSX來操作的 HSSF - 提供讀寫Microsoft

    2024年02月05日
    瀏覽(26)
  • SpringBoot整合Easyexcel實(shí)現(xiàn)將數(shù)據(jù)導(dǎo)出為Excel表格的功能

    SpringBoot整合Easyexcel實(shí)現(xiàn)將數(shù)據(jù)導(dǎo)出為Excel表格的功能

    本文主要介紹基于SpringBoot +MyBatis-Plus+Easyexcel+Vue實(shí)現(xiàn)缺陷跟蹤系統(tǒng)中導(dǎo)出缺陷數(shù)據(jù)的功能,實(shí)現(xiàn)效果如下圖: EasyExcel是一個(gè)基于Java的、快速、簡潔、解決大文件內(nèi)存溢出的Excel處理工具。他能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成Excel的讀、寫等功能。 本文

    2024年02月14日
    瀏覽(31)
  • 【EasyExcel】導(dǎo)出excel凍結(jié)表頭和凍結(jié)指定列并支持篩選器

    【EasyExcel】導(dǎo)出excel凍結(jié)表頭和凍結(jié)指定列并支持篩選器

    需求背景: ? ? ? ? 導(dǎo)出excel的同時(shí)凍結(jié)表頭和前兩列基礎(chǔ)信息,方便導(dǎo)出后用戶查看信息。 一、技術(shù)選型: ? ? ? ? easyExcel的自定義寫策略處理:SheetWriteHandler 二、方案設(shè)計(jì):(基于實(shí)現(xiàn) SheetWriteHandler 接口) ? ? ? ? 1、重寫afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder,

    2024年01月24日
    瀏覽(30)
  • Springboot基于easyexcel實(shí)現(xiàn)一個(gè)excel文件包含多個(gè)sheet表格的數(shù)據(jù)導(dǎo)出

    Springboot基于easyexcel實(shí)現(xiàn)一個(gè)excel文件包含多個(gè)sheet表格的數(shù)據(jù)導(dǎo)出

    EasyExcel 是一款基于Java的開源Excel操作工具,它提供了簡單且強(qiáng)大的 API,使開發(fā)人員可以輕松地讀寫、操作和生成Excel文件。 EasyExcel 支持 Excel 文件的導(dǎo)入和導(dǎo)出,可以處理大量數(shù)據(jù),具有高性能和低內(nèi)存占用。它可以讀取 Excel 文件中的數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)換為 Java 對象,也可

    2024年02月03日
    瀏覽(21)
  • EasyExcel實(shí)現(xiàn)Excel文件導(dǎo)入導(dǎo)出功能

    EasyExcel實(shí)現(xiàn)Excel文件導(dǎo)入導(dǎo)出功能

    Java領(lǐng)域解析、生成Excel比較有名的框架有Apache poi、jxl等。但他們都存在一個(gè)嚴(yán)重的問題就是非常的耗內(nèi)存。如果你的系統(tǒng)并發(fā)量不大的話可能還行,但是一旦并發(fā)上來后一定會OOM或者JVM頻繁的full gc。 EasyExcel是阿里巴巴開源的一個(gè)excel處理框架,以使用簡單、節(jié)省內(nèi)存著稱。

    2024年02月02日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包