再次开坑,看看能不能把之前无法访问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. 可参考资料太少,找不到正确的使用说明文档
其实就是不想付费和找不到官方文档说明导致的问题,小功能尚且被卡脖子如此,不知道大点的功能会怎样,往后有坑再踩踩看吧