使用简化版的jar包
api files('libs/poi-3.12-android-a.jar') api files('libs/poi-ooxml-schemas-3.12-a.jar')
导入遇到了两个兼容问题
1.build.gradle文件里面
android {
要添加
packagingOptions { exclude 'META-INF/INDEX.LIST' }
2.加载大文件要在清单文件里面加android:largeHeap="true"和配置文件的解除大小限制
导入成功后,后面实现就简单了
第一步选择设备内的excel格式文件
可以指定文件类型跳转也可以用户选择后判断文件格式
第二步根据选择返回的Uri获取文件真实位置路径
第三步
解析文件
/** * 读取excel (xls和xlsx) * 从Excel报表中读出数据 */ public static void readExcel(File file) { String filePath = file.getAbsolutePath(); Sheet sheet = null; List<Map<String, String>> list = null; Workbook wb = null; if (filePath == null) { return; } String extString = filePath.substring(filePath.lastIndexOf(".")); InputStream is = null; try { is = new FileInputStream(filePath); if (".xls".equals(extString)) { wb = new HSSFWorkbook(is); } else if (".xlsx".equals(extString)) { wb = new XSSFWorkbook(is); } else { wb = null; } if (wb != null) { // 用来存放表中数据 // 获取第一个sheet sheet = wb.getSheetAt(0); if (sheet == null) { return; } //获得当前sheet的开始行 int firstRowNum = sheet.getFirstRowNum(); //获得当前sheet的结束行 int lastRowNum = sheet.getLastRowNum(); //循环除了第一行的所有行 for (int rowNum = firstRowNum + 1; rowNum <= lastRowNum; rowNum++) { //获得当前行 Row row = sheet.getRow(rowNum); if (row == null) { continue; } //获得当前行的开始列 int lastCellNum = row.getLastCellNum(); //获得当前行的列数 String[] cells = new String[lastCellNum]; Log.d(TAG, "readDataFromExcel: " + row.getCell(0).toString()); Log.d(TAG, "readDataFromExcel: " + (String) getCellFormatValue(row.getCell(0))); } BaseDialog.hiddenWaitingDialog(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 获取单个单元格数据 * * @param cell * @return */ private static Object getCellFormatValue(Cell cell) { Object cellValue; if (cell != null) { switch (cell.getCellType()) { case Cell.CELL_TYPE_BOOLEAN: cellValue = cell.getBooleanCellValue(); break; case Cell.CELL_TYPE_NUMERIC: cellValue = String.valueOf(cell.getNumericCellValue()); break; case Cell.CELL_TYPE_FORMULA: if (DateUtil.isCellDateFormatted(cell)) { cellValue = cell.getDateCellValue(); } else { cellValue = cell.getNumericCellValue(); } break; case Cell.CELL_TYPE_STRING: cellValue = cell.getStringCellValue(); break; default: cellValue = ""; } } else { cellValue = ""; } return cellValue; }
后续操作看需求了
jar包下载地址:https://github.com/binZai-ComeOn/ReadXlsx?tab=readme-ov-file