安卓实现导入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

相关推荐
爱笑鱼1 小时前
Android 系统启动机制(九):system_server 已经运行,为什么还不能说 Android 启动完成?
android
mmsx1 小时前
Android 上的 AI 对话链路:流式响应、SSE 解析与三级降级
android·kotlin
泡海椒2 小时前
JQuick-Excel 字段映射实战:用 MAPPING 固化 Excel 表头与业务字段契约
xml·java·开发语言·excel
阿俊-全栈开发2 小时前
LikeShop单商户高级版定时任务实现:订单超时关闭与自动确认收货
android·likeshop·likeshop开源商城
开开心心就好2 小时前
视频模糊怎么修复?免费工具支持批量处理
java·前端·人工智能·智能手机·pdf·excel
倔强的石头1063 小时前
【Transformer】Tokenization详解_BPE_WordPiece_SentencePiece
android·深度学习·transformer
Data-Miner3 小时前
能处理Excel表的AI怎么选?脚本能复用,一次买断后期不烧 token
大数据·人工智能·excel
haerapi3 小时前
仓库拣货路线不只靠最短边:S 形启发式的反例记录
android·开发语言·javascript
其实防守也摸鱼12 小时前
Fastjson 反序列化漏洞(JNDI注入)
android·数据库·安全·oracle·自动化·fastjson·反序列化
狗凯之家源码网14 小时前
微博图床 PHP 系统搭建与实战应用指南
android·开发语言·php