您的位置:首页 > 新闻 > 会展 > 安卓实现导入Excel文件

安卓实现导入Excel文件

2024/12/23 2:58:10 来源:https://blog.csdn.net/qq_33540190/article/details/142355059  浏览:    关键词:安卓实现导入Excel文件

使用简化版的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;
}

后续操作看需求了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com