Android将Excel表数据导入SQLite数据库

前两天接了个私活,需求方给了一个Excel表格,需要使用到里面的7000+条数据进行查询,最开始以为7000条一条条加入数据库也还好,以下是其中一部分数据:

但当我添加了20多条的时候突然发现这样的方式太蠢了,所以想着既然文件可以读取,那是否可以将Excel文件里的数据读取导入数据库呢?上网查了下资料,发现确实是可行的。

准备工作

我们要将Excel导入SQLite数据库,需要使用JXL API(Java Excel API),所以我们需要在gradle文件中导入jxl的maven库:
jxl maven 仓库地址

// https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl
compile group: 'net.sourceforge.jexcelapi', name: 'jxl', version: '2.6.12'

由于我只用到了Sheet表格的读取功能,所以在需要使用api的java代码中导入以下几个jxl包:

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

使用

我将excel文件放到了assets包下,具体对excel表格进行操作的代码如下:

private void importSheet() {
        try {
            // 1
            InputStream is = getResources().getAssets().open("vipdb.xls");
            // 2
            Workbook book = Workbook.getWorkbook(is);
            // 3
            Sheet sheet = book.getSheet(0);
            // 4
            for (int j = 0; j < sheet.getRows(); ++j) {
                // 5
                initDataInfo(sheet.getCell(0, j).getContents(), sheet.getCell(1, j).getContents());
            }
            book.close();
        } catch (IOException | BiffException e) {
            e.printStackTrace();
        }

    }

//这个方法是写在SQLiteOpenHelper子类里的,为了方便查看这里拿出来了
public void initDataInfo(String code, String value) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("code", code);
        cv.put("value", value);
        db.insert(DATA_TABLE, null, cv);
    }

通过sheet对象就可以对excel表格进行操作了
1. 打开excel文件,我的excel文件放在了Assets包下,你也可以将文件放在SD卡下,只要路径正确就行
2. 获取Workbook对象,通过查看Workbook源码可以看到,这是个抽象类,里面包含了很多对于Sheet表格访问的方法
3. 获取第一页的Sheet表对象
4. sheet.getRows()可以获取行数,sheet.getColumns()获取列数
5. sheet.getCell(0, j).getContents()可以获得第j行第一列的内容,同理sheet.getCell(1, j).getContents()可以获取第j行第二列的内容

注意

如果excel文件中含有中文,在进行操作的时候,jxl会自动将xls文件转成csv文件格式,而在转换后会将中文默认转成”_”下划线,如我贴的第一张图中的数据第二列的“01期08”则会转成“01_08”,如果你想在存入数据库使用中文存入,只需要将字符”_”替换成”期”即可

你可能感兴趣的:(Android)