安卓实现导入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) {
            // 用来存放表中数据
            // 获取第一个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

相关推荐
星释3 小时前
二级等保实战:MySQL安全加固
android·mysql·安全
缺点内向7 小时前
Java: 如何在Excel中添加或删除分页符?
java·excel
不想上班的小吕7 小时前
SAP EXCEL模板下载导入
excel·sap
沐怡旸7 小时前
【底层机制】垃圾回收(GC)底层原理深度解析
android·面试
whatever who cares8 小时前
android/java中gson的用法
android·java·开发语言
用户0273851840268 小时前
【Android】活动的正/异常生命周期和启动模式、标志位详解
android
向日葵同志443309 小时前
使用@univerjs纯前端渲染excel, 显示图片、链接、样式
前端·react.js·excel
nono牛9 小时前
MTK平台详解`adb devices`输出的序列号组成
android·linux·adb·智能手机
zhangphil9 小时前
Android通过SQL查询trace分析进程启动线程总数量
android