使用简化版的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) {// 用来存放表中数据// 获取第一个sheetsheet = 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; }
后续操作看需求了