Android读出Excel报表数据然后导出写入到SQLite数据库

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/86168987

Android读出Excel报表数据然后导出写入到SQLite数据库

假设现在有一个excel.xls位于Android手机外部存储器的根目录下,数据报表为:

需要把excel.xls的数据导出,写入到Android SQLite数据库中去。

import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        List<CellDataContainer> cellDataContainer = readDataFromExcel();
        writeDataToSQLite(cellDataContainer);
    }

    // 第二阶段,把从Excel报表中读出来的数据导出,写入到SQLite数据库中。
    private void writeDataToSQLite(List<CellDataContainer> cellDataContainer) {
        SQLiteDatabase mSQLiteDatabase = MySQLiteOpenHelper.getInstance(this).getWritableDatabase();

        // 从Excel报表中读取出来的数据首行(第0行)是列名,故跳过。
        for (int i = 1; i < cellDataContainer.size(); i++) {
            CellDataContainer container = cellDataContainer.get(i);

            ContentValues contentValues = getContentValues(Integer.parseInt(container.id), container.name, container.gender, Integer.parseInt(container.age));

            mSQLiteDatabase.insert(MySQLiteOpenHelper.TABLE_NAME, null, contentValues);
        }

        mSQLiteDatabase.close();
    }

    private ContentValues getContentValues(int id, String name, String gender, int age) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(MySQLiteOpenHelper.STUDENT_ID, id);
        contentValues.put(MySQLiteOpenHelper.STUDENT_NAME, name);
        contentValues.put(MySQLiteOpenHelper.STUDENT_GENDER, gender);
        contentValues.put(MySQLiteOpenHelper.STUDENT_AGE, age);
        return contentValues;
    }

    // 第一阶段,从Excel报表中读出数据。
    private List<CellDataContainer> readDataFromExcel() {
        File xlsFile = new File(Environment.getExternalStorageDirectory(), "excel.xls");

        HSSFWorkbook mWorkbook = null;
        try {
            FileInputStream fis = new FileInputStream(xlsFile);
            mWorkbook = new HSSFWorkbook(fis);
        } catch (Exception e) {
            e.printStackTrace();
        }

        HSSFSheet mSheet = mWorkbook.getSheet("Student");

        int rowNumber = mSheet.getLastRowNum() + 1;

        List<CellDataContainer> cellDataContainer = new ArrayList<>();
        for (int row = 0; row < rowNumber; row++) {
            HSSFRow r = mSheet.getRow(row);

            CellDataContainer container = new CellDataContainer();
            container.id = r.getCell(0).toString();
            container.name = r.getCell(1).toString();
            container.gender = r.getCell(2).toString();
            container.age = r.getCell(3).toString();

            cellDataContainer.add(container);
        }

        return cellDataContainer;
    }

    // 从Excel报表中单元读取出来的数据容器。
    private class CellDataContainer {
        public String id;
        public String name;
        public String gender;
        public String age;
    }
}

MySQLiteOpenHelper.java:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.annotation.Nullable;

public class MySQLiteOpenHelper extends SQLiteOpenHelper {

    //数据库名称。
    public static final String DATABASE_NAME = "zhangphil.db";

    //数据库版本号。
    public static int DATABASE_VERSION = 1;

    private static MySQLiteOpenHelper helper;

    //表名。
    public static final String TABLE_NAME = "Student";

    public static final String STUDENT_ID = "id";
    public static final String STUDENT_NAME = "name";
    public static final String STUDENT_GENDER = "gender";
    public static final String STUDENT_AGE = "age";

    //创建数据库表的SQL语句。
    private String sql_create_table = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" + STUDENT_ID + " integer ," + STUDENT_NAME + " varchar(60)," + STUDENT_GENDER + " varchar(1)," + STUDENT_AGE + " int)";

    public static MySQLiteOpenHelper getInstance(Context context) {
        if (helper == null) {
            helper = new MySQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        return helper;
    }

    public MySQLiteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建数据库的表,如果不存在。
        db.execSQL(sql_create_table);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

猜你喜欢

转载自blog.csdn.net/zhangphil/article/details/86168987