EasyExcel 导出数据超过 Excel 单表上限了,该怎么办??? | 您所在的位置:网站首页 › excel怎么切分 › EasyExcel 导出数据超过 Excel 单表上限了,该怎么办??? |
思考逻辑: 了解一下Excel单表最多存储多少行数据(可以存储1048576条数据,1024的平方,2的20次方)。 知道最多多少行就能以这个数为条件,如果超过则进行分表。 分表的同时需要对数据进行分割,才能不超过最大限度。 注: 这就是简单的demo,有关于自己项目中的逻辑自己加。 实体类(非常简单,为了导出表更快) @ToString @Data @NoArgsConstructor @AllArgsConstructor public class Student { @ExcelProperty(value = "学生年龄") private int age; }测试类 //进行分表demo @Test public void TestWrite() { //获取要导出的数据 List fillData = initFillData(); //获取一共多少条数据 int totalCount = fillData.size(); String fileName = "学生信息报告.xlsx"; //单表最多存储数 int sheetMaxNum = 1048576; ExcelWriter excelWriter = null; // 如果总数超出单个sheet的大小 1048575 则进行分页 if (totalCount > sheetMaxNum) { excelWriter = EasyExcel.write(fileName, Student.class).build(); // 设置的单个Sheet的数据量,必须小于1048576, int pageSize = 1048575; //要分表的页数 int sheetCount = 0; //如果能整除则为整除的数 if (totalCount % pageSize == 0){ sheetCount = totalCount / pageSize ; }else{ //如果不能整除则+1 sheetCount = (totalCount / pageSize) + 1 ; } int num = 0; //进行循环分表 for (int pageNum = 1; pageNum = totalCount) { fromIndex = totalCount; } //将数据进行分组 excelWriter.write(fillData.subList(num, fromIndex), writeSheet); num = fromIndex ; } } else { // 不超出则一次性全部导出 excelWriter = EasyExcel.write(fileName, Student.class).build(); WriteSheet writeSheet = EasyExcel.writerSheet("学生信息表").head(Student.class).build(); excelWriter.write(initFillData(), writeSheet); } excelWriter.finish(); } 测试导出两百万条数据 private static List initFillData() { ArrayList fillDatas = new ArrayList(); for (int i = 2; i |
CopyRight 2018-2019 实验室设备网 版权所有 |