Android将Excel表数据导入SQLite数据库
Posted 碎格子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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将Excel表数据导入SQLite数据库的主要内容,如果未能解决你的问题,请参考以下文章
用SQLiteManager软件怎么实现把excel里的数据导入到sqlite
如何将数据从 postgres 数据库导入到 android sqlite