我粗略查看过EasyExcel源码,在读取Excel完成每行数据与实体的映射的实现应该是在DefaultAnalysisEventProcessor类的一个dealDatafan方法完成映射的吧。在开发中,比如说读取某一些模板的数据,也许只会读取第几行到第几行的数据(因为再往下读取就可以会出现一些非法数据,比如模板最下面有个时间,会导致映射出现问题,然后程序报错),这时候肯定会使用ReadListener的hasNext来控制读取的行数,但是一旦提前结束读Excel,doAfterAllAnalysed就不会被执行。这样就会出现需要程序员自己去判断是否完成已经完成处理表格,然后再把剩余存储在内存的数据存进数据库,doAfterAllAnalysed失去了其本身的作用,显得有点鸡肋。
对于这个场景,虽然程序员靠自己判断是否“完成”读取进而处理剩余的数据,但是我希望EasyExcel可以提供给我们程序员自定义AnalysisEventProcessor的能力,就像Spring的拦截器一样,让我们可以通过判断某些条件是否成立,进而判断是否将行数据与Clas实体进行映射,避免了映射失败出现报错的情况,也可以使得最后面excel读取完成,顺利调用doAfterAllAnalysed方法去处理内存剩余的数据,不需要程序员自己去判断,使得doAfterAllAnalysed不再那么鸡肋。
当然,这只是我个人的想法,可以会存在很多错误的地方,欢迎作者大大一起交流指教!!!
1条答案
按热度按时间ha5z0ras1#