easyExcel 中读取遇到的坑

2023-10-30 23:09:17 +08:00
 SlanWyf
@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 行,所以后面的会覆盖掉前面的?

1292 次点击
所在节点    程序员
4 条回复
wuyiccc
2023-10-30 23:35:58 +08:00
没错,PageReadListener 里面的 invoke 默认 BATCH_COUNT 是 100 , 会循环调用 invoke ,所以应该是 employeeList.addAll
wuyiccc
2023-10-30 23:38:13 +08:00
invoke 里面 cachedDataList>=100 之后,才会调用 list -> employeeList=list
antipro
2023-10-31 06:13:12 +08:00
接口的名称已经表示这是分页读取的,这么设计肯定有道理,万一文件里有 100 万行,也一次性给 100 万?
whoami9426
2023-11-03 17:04:04 +08:00
文档其实写的很仔细了 不是人家的坑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/986885

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX