大数据量,避免内存溢出,以及提升读取效率,最好行数在10万行级别以上使用,否则我感觉意义不算大

###2.9.1 ExceL by sax读取
by sax这个函数经过几轮修改,也差不多勉强到达可以用的环节了下面讲解下如何使用,修改来就该去就剩这一个方法了,不在返回数据用户自己实现IReadHandler来保存数据,不提供错误校验

/**
     * Excel 通过SAX解析方法,适合大数据导入,不支持图片
     * 导入 数据源本地文件,不返回校验结果 导入 字 段类型 Integer,Long,Double,Date,String,Boolean
     * 
     * @param inputstream
     * @param pojoClass
     * @param params
     * @param handler
     */
    public static void importExcelBySax(InputStream inputstream, Class<?> pojoClass,
                                        ImportParams params, IReadHandler handler) {
        new SaxReadExcel().readExcel(inputstream, pojoClass, params, handler);
    }

主要是自己实现IReadHandler,easypoi解析完每个对象都会调用,handler方法,全部解析完成后会调用doAfterAll 方法

    public interface IReadHandler<T> {
        /**
        * 处理解析对象
        * @param t
        */
        public void handler(T t);
        /**
        * 处理完成之后的业务
        */
        public void doAfterAll();

    }
- 不支持校验
- 不支持图片
- 不支持一对多

Demo如下,基本用法和其他的没啥去呗,自己处理handler就可以了

 @Test
    public void test() {
        try {
            ImportParams params = new ImportParams();
            params.setTitleRows(1);
            long start = new Date().getTime();
            ExcelImportUtil.importExcelBySax(
                    new FileInputStream(
                            new File("import/ExcelExportMsgClient.xlsx")),
                    MsgClient.class, params, new IReadHandler<MsgClient>() {
                        @Override
                        public void handler(MsgClient o) {
                            System.out.println(ReflectionToStringBuilder.toString(o));
                        }

                        @Override
                        public void doAfterAll() {

                        }
                    });
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

###2.9.2 CSV导入
csv处理参考 ##7.1

文档更新时间: 2020-04-08 16:04   作者:admin