Bootstrap

Android poi读取Excel文件(xls, xlsx)

再次开坑,看看能不能把之前无法访问xlsx文件的问题修复一下。这次开坑了解到,apache-poi是专门给Android开了一个库以支持Android读写的,之前的坑踩错了。

开坑过程发现一个问题,现在CSDN动不动就要开会员,资源文件最低会员积分、专栏要付费观看,连关注个博主都要花钱,不开会员真的是寸步难行,论坛想盈利无可厚非,但确实堵死很多路子,这么看起来chatgpt的性价比现在是越来越高了。

话不多说,上代码

一、环境搭建 

文件资源路径

链接:https://pan.baidu.com/s/1fYWecxhAe3v6Pw2mCp4S4w 
提取码:21xz 

依赖引用

dependencies {
    implementation files('libs/poi-3.12-android-a.jar')
    implementation files('libs/poi-ooxml-schemas-3.12.jar')
}

二、代码编写

    /**
     * 针对Apache-android实现xlsx, xls读取
     * @param inputStream
     * @return
     */
    public List<String> readExcel(InputStream inputStream) {
        List<String> dataList = new ArrayList<>();

        try {
             Workbook workbook = new XSSFWorkbook(inputStream);
            Sheet sheet = workbook.getSheetAt(0);

            for (Row row: sheet) {
                for (Cell cell : row) {
                    Log.i(TAG, "getCellType: " + cell.getCellType());
                    if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                        Log.i(TAG, "readExcel: data = " + cell.getNumericCellValue());
                        dataList.add(String.valueOf(cell.getNumericCellValue()));
                    } else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
                        Log.i(TAG, "readExcel: data = " + cell.getStringCellValue());
                        dataList.add(cell.getStringCellValue());
                    } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
                        Log.i(TAG, "readExcel: data = " + cell.getBooleanCellValue());
                        dataList.add(String.valueOf(cell.getBooleanCellValue()));
                    }
                }
            }

        } catch (IOException xmlException) {
            xmlException.printStackTrace();
        }

        return dataList;
    }


    public void read() {
        // 获取AssetsManger对象
        AssetManager assetManager = context.getAssets();
        InputStream inputStream = null;
        try {
             inputStream = assetManager.open("data.xlsx");
             List<String> strings = excelReader.readExcel(inputStream);
             Log.i(TAG, "strings: " + strings.toString());
        } catch (IOException e) {
             e.printStackTrace();
        }
    }

好,这回一遍过

三、总结

这段时间的开坑一共用了三个不同的依赖,他们相应的问题是

1. org.apache.poi:poi-ooxml:4.x,不支持Android使用,不支持原因:

Android底层库不支持xml所需的bean类,使用即报错

2. org.apache.poi:poi-ooxml:5.2.0,支持Android使用.xls前缀,但不支持.xlsx

3. poi-3.12-android-a,专门开放给android使用的依赖库,支持.xls, .xlsx

apche专门针对android不支持库开放的依赖,这个是当前使用最正确的第三方依赖包

这段踩坑路子总结一下,

1. CSDN会员限制,一些写过这个的博主专门开个专栏付费,文件付费,最后要限时会员解锁才查到

2. 搜索引擎总是搜一些老旧版本的,可能人家第三方库都已经不支持了,没有更新迭代好

3. 可参考资料太少,找不到正确的使用说明文档

其实就是不想付费和找不到官方文档说明导致的问题,小功能尚且被卡脖子如此,不知道大点的功能会怎样,往后有坑再踩踩看吧

;