• 大小: 23KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: Java
  • 标签: Excel导出  千万Excel  

资源简介

轻松解决普通poi形式导出Excel的中出现的栈溢出问题,此资源可实现千万级数据分批导出csv文件,csv大数据量导出(千万级别,不会内存溢出),多线程导出 ,生产环境已经很稳定的使用着

资源截图

代码片段和文件信息

package com.excel.common.utils.excel;

import java.io.File;
import java.sql.ResultSetmetaData;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * CSV导出之大量数据-导出压缩包
 * 
 */
public class CsvExportBatchUtils {

    public static void getExportExcel(Listject>> list) {
        long startTime = System.currentTimeMillis();
        ResultSetmetaData md = null; //获得结果集结构信息元数据
        Listject> headList = new ArrayList<>();

        headList.add(“序号“);
        // 设置数据
        int listCount = list.size();
        for (Map.Entryject> entry : list.get(0).entrySet()) {
            //表头
            headList.add(entry.getKey());
        }

        //导出6万以上数据。。。
        int pageSize= 50000;//设置每一个excel文件导出的数量
        int quotient = listCount/pageSize+(listCount%pageSize > 0 ? 1:0);//循环次数
        List srcfile=new ArrayList();
        for(int i=0;i            int startCount = ((i> 0 ? i:0)*pageSize);
            if((listCount%pageSize)>0){
                if(i==(quotient-1)){
                    pageSize = (int)(listCount%pageSize);//余数
                }
            }
            Listject>> dataList = getObjExcel(startCount pageSizelist);
            // 导出文件路径
            String downloadFilePath = “C:“ + File.separator + “cap4j“ + File.separator + “download“+File.separator;
            // 导出文件名称
            String  fileName = String.valueOf(i);
            // 导出CSV文件
            File csvFile = CSVUtils.createCSVFile(headList dataList downloadFilePath fileName);
            srcfile.add(csvFile);
        }
        long endTime = System.currentTimeMillis();
        System.out.println(“分批CSV导出“+(endTime-startTime));
    }
    private static Listject>> getObjExcel(int startCount int pagesize Listject>> list) {

        Listject>> dataList = new ArrayListject>>();
        Listject> rowList = null;
        for (int i = 0; i < pagesize; i++) {
            rowList = new ArrayListject>();
            object[] row = new object[list.get(i).entrySet().size()+1];
            int endCount = startCount+i;
            row[0] = endCount+1;
            int num=0;
            for (Map.Entryject> entry : list.get(endCount).entrySet()) {
                num++;
                row[num]=entry.getValue();
            }
            for(int j=0;j                rowList.add(row[j]);
            }
            dataList.add(rowList);
        }
        return dataList;
    }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-12-05 14:23  java澶氱嚎绋嬪鍑篹xcel浼樺寲\
     文件        2705  2018-12-05 14:19  java澶氱嚎绋嬪鍑篹xcel浼樺寲\CsvExportBatchUtils.java
     文件        2961  2018-12-05 14:20  java澶氱嚎绋嬪鍑篹xcel浼樺寲\CsvExportThread.java
     文件        2702  2018-12-05 14:20  java澶氱嚎绋嬪鍑篹xcel浼樺寲\CSVUtils.java
     文件        1261  2018-12-05 14:20  java澶氱嚎绋嬪鍑篹xcel浼樺寲\DownLoad.java
     文件        2685  2018-12-05 14:20  java澶氱嚎绋嬪鍑篹xcel浼樺寲\ExecutorThread.java
     文件       10041  2018-09-26 16:42  java澶氱嚎绋嬪鍑篹xcel浼樺寲\java涓璫sv澶ф暟鎹紙鍗冧竾绾у埆锛変紭鍖栧鍑?rar
     目录           0  2018-12-05 14:24  __MACOSX\
     目录           0  2018-12-05 14:24  __MACOSX\java澶氱嚎绋嬪鍑篹xcel浼樺寲\
     文件         795  2018-09-26 16:42  __MACOSX\java澶氱嚎绋嬪鍑篹xcel浼樺寲\._java涓璫sv澶ф暟鎹紙鍗冧竾绾у埆锛変紭鍖栧鍑?rar
     文件        2434  2018-12-05 14:20  java澶氱嚎绋嬪鍑篹xcel浼樺寲\ThreadPools.java
     文件        6133  2018-12-05 14:20  java澶氱嚎绋嬪鍑篹xcel浼樺寲\ZipUtil.java
     文件       13872  2018-12-05 14:23  java澶氱嚎绋嬪鍑篹xcel浼樺寲\ZipUtils.java

评论

共有 条评论