V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SlanWyf
V2EX  ›  程序员

easyExcel 中读取遇到的坑

  •  
  •   SlanWyf · 2023-10-30 23:09:17 +08:00 · 1302 次点击
    这是一个创建于 394 天前的主题,其中的信息可能已经有所发展或是发生改变。
    @Slf4j
    public class test {
        public List<Employee> employeeList;
        private final String fileName1="C:\\Users\\YiFan\\Desktop\\test1.xlsx";
        @Test
        public void testSimpleWrite() {
            log.info("路径: {}",fileName1);
            log.info("写入数据开始");
            EasyExcel.write(fileName1, Employee.class).sheet("模板").doWrite(SimpleWrite.data(200));
            log.info("写入数据结束");
        }
        @Test
        public void testSimpleRead() {
            log.info("路径: {}",fileName1);
            log.info("读数据开始");
            EasyExcel.read(fileName1, Employee.class,new PageReadListener<Employee>(list -> employeeList=list)).sheet("模板").doRead();
            log.info("读数据结束");
            log.info("employeeList:{},size:{}",employeeList,employeeList.size());
        }
    }
    

    如代码所示,先写入两百行数据,此时打开 excel 是可以看到两百行数据的。但读取的时候只有一百行数据。如果初始化 employeeList ,往里面添加数据。则正常显示 200 行。所以请问是不是每次读取 100 行,所以后面的会覆盖掉前面的?

    4 条回复    2023-11-03 17:04:04 +08:00
    wuyiccc
        1
    wuyiccc  
       2023-10-30 23:35:58 +08:00
    没错,PageReadListener 里面的 invoke 默认 BATCH_COUNT 是 100 , 会循环调用 invoke ,所以应该是 employeeList.addAll
    wuyiccc
        2
    wuyiccc  
       2023-10-30 23:38:13 +08:00
    invoke 里面 cachedDataList>=100 之后,才会调用 list -> employeeList=list
    antipro
        3
    antipro  
       2023-10-31 06:13:12 +08:00 via Android
    接口的名称已经表示这是分页读取的,这么设计肯定有道理,万一文件里有 100 万行,也一次性给 100 万?
    whoami9426
        4
    whoami9426  
       2023-11-03 17:04:04 +08:00
    文档其实写的很仔细了 不是人家的坑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5429 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 07:45 · PVG 15:45 · LAX 23:45 · JFK 02:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.