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

相关推荐
运维Z叔22 分钟前
云安全 | AWS S3存储桶安全设计缺陷分析
android·网络·网络协议·tcp/ip·安全·云计算·aws
Reese_Cool2 小时前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言
平凡シンプル2 小时前
安卓 uniapp跨端开发
android·uni-app
严文文-Chris2 小时前
【设计模式-享元】
android·java·设计模式
Eiceblue2 小时前
Python 复制Excel 中的行、列、单元格
开发语言·python·excel
cc蒲公英2 小时前
Vue2+vue-office/excel 实现在线加载Excel文件预览
前端·vue.js·excel
趋势大仙3 小时前
SQLiteDatabase insert or replace数据不生效
android·数据库
DS小龙哥3 小时前
QT For Android开发-打开PPT文件
android·qt·powerpoint
试行4 小时前
Android实现自定义下拉列表绑定数据
android·java