java集成easyexcel的使用(二)(导入,包含完整工具类)

1、easyexcel导入,会使用到上一篇的EasyExcelUtil的工具类

 List<StockImeiChangeImport> imeiImportList = EasyExcelUtil.readEasyExcelData(file.getInputStream(), StockImeiChangeImport.class,1000);

2、主要用的EasyExcelUtil中的这个方法:

    /**
     * 读取Excel中文件
     * @param  inputStream 文件流,用完请自己关闭
     * @param  clazz 接收类,row到bean的映射类
     * @param  listSize 最大读取行数,超过listSize的将被丢弃。
     */
    public static <T> List<T> readEasyExcelData(InputStream inputStream, Class<T> clazz, int listSize) {
        List<T> ret = new ArrayList<>();

        //本地读取文件 并验证
        SyncReadListener syncReadListener = new SyncReadListener(){
            @Override
            public void invoke(Object object, AnalysisContext context) {
                if (super.getList().size() > listSize) {
                    //超过listSize行抛弃,节约内存。==》通过异常终止,会导致easyexcel抛出新的异常,不方便捕捉。所以只能通过类似自旋等待结束。
                    return;
                }

                //判断是否读取的是空行
                boolean addFlag = false;
                Class<?> aClass = object.getClass();
                try {
                    for (Field declaredField : aClass.getDeclaredFields()) {
                        declaredField.setAccessible(true);
                        Object o = declaredField.get(object);
                        if (o != null) {
                            addFlag = true;
                            //去除前后空格
                            if (o instanceof String) {
                                declaredField.set(object, o.toString().trim());
                            }
                        }
                    }
                } catch (IllegalAccessException e) {
                    throw new IllegalArgumentException(e);
                }

                if (addFlag) {
                    super.invoke(object, context);
                }
            }
        };

        ExcelReaderSheetBuilder sheet = EasyExcel.read(inputStream, clazz,syncReadListener).sheet();
        sheet.doRead();

        for (Object o : syncReadListener.getList()) {
            if (clazz.isInstance(o)) {
                ret.add(clazz.cast(o));
            }
        }

        return ret;
    }

3、对应的bean

   //@ExcelProperty("XXXXXX")注解里填写excel对应的列名
   
   @ExcelProperty("串号编号")
	private String ImeiNum;
	@ExcelProperty("串号内容")
	private String Imei;

猜你喜欢

转载自blog.csdn.net/rg201612/article/details/109991312