Android 讀取Excel數據并保存在本地數據庫

在工作中遇到需要將Excel的數據讀取出來并保存在本地數據庫中的操作,數據如下:

圖片.png

需要做以下準備:

  • 讀取Excel的jar包【文章末尾會分享該jar包】
  • 保存數據的數據庫框架,在這里我們使用GreenDao3.0來做數據保存

接下來我們開始一步步實現Excel數據的 讀取和保存

先將GeenDao的準備工作做好

  • 1.需要在工程(Project)的build.gradle中添加依賴
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        //GreeDao依賴
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
    }
}
  • 2.在項目(Module)的build.gradle中添加依賴
//GreenDao自動生成類插件
apply plugin: 'org.greenrobot.greendao'
android {
        ...
     buildTypes {
        ...
        //GreenDao配置
        greendao {
            //數據庫版本
            schemaVersion 2
        }
    }
}
dependencies {
    ...
    //GreenDao依賴
    compile 'org.greenrobot:greendao:3.2.2'
}
  • 3.創建一個Bean用來作為數據庫表名[類名]字段名[對象名]
@Entity
public class Country extends BaseBean {

    /**
     * ID必須指明 類型必須是Long或long
     */
    @Id
    private long id;
    private String areaCode;
    private String subName;
    private String nameCn;
    private String nameEn;
    private String capitalCn;
    private String capitalEn;

做完以上操作再Make Project一下也就是ctrl+F9一下 也就是點一下啟動項目前面的那個小錘錘[studio2.3.3],就可以看到GreenDao已經給我們自動生成了Country 對象的get set方法和幾個操作數據庫的類。


圖片.png
  • 4.創建數據庫和數據庫操作類
/**
 * 數據庫操作類
 */
public class DaoManager {
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;
    private DaoManager() {
        init();
    }
    /**
     * 靜態內部類,實例化對象使用
     */
    private static class SingleInstanceHolder {
        private static final DaoManager INSTANCE = new DaoManager();
    }
    /**
     * 對外唯一實例的接口
     *
     * @return
     */
    public static DaoManager getInstance() {
        return SingleInstanceHolder.INSTANCE;
    }

    /**
     * 初始化數據
     */
    private void init() {
        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(ExcelApplication.getContext(), "DataBaseName");
        mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
        mDaoSession = mDaoMaster.newSession();
    }
    public DaoMaster getDaoMaster() {
        return mDaoMaster;
    }

    public DaoSession getDaoSession() {
        return mDaoSession;
    }
}
/**
 * 數據庫表操作類
 */
public class CountryDaoUtils {
    /**
     * 單條插入
     *
     * @param country country
     */
    public static void inserCountry(Country country) {
        DaoManager.getInstance().getDaoSession()
                .insertOrReplace(country);
    }

    /**
     * 批量增加
     */
    public static void inserCountryList(List<Country> country) {
        DaoManager.getInstance().getDaoSession()
                .getCountryDao()
                .insertOrReplaceInTx(country);
    }

    /**
     * 根據ID刪除
     *
     * @param id id
     */
    public static void deleteCountry(long id) {
        DaoManager.getInstance().getDaoSession()
                .getCountryDao()
                .deleteByKey(id);
    }

    /**
     * 查詢所有
     *
     * @return List
     */
    public static List<Country> queryAllCountry() {
        return DaoManager.getInstance().getDaoSession().loadAll(Country.class);
    }

    /**
     * 按條件查詢
     *
     * @param areaCode 國家碼
     * @return List
     */
    public static List<Country> queryByAreaCode(String areaCode) {
        return DaoManager.getInstance().getDaoSession()
                .queryBuilder(Country.class)
                .where(CountryDao.Properties.AreaCode.eq(areaCode))
                .list();
    }
}

關于GreenDao的準備工作就做完了,GreenDao的具體詳細操作可參考這里,在這就不過多介紹了。

接下來就是讀取Excel的操作了,很簡單,僅僅三步就夠了

  • 1.導入jar包


    圖片.png
  • 2.將準備好的Excel文件放在asset文件夾下


    圖片.png
  • 3.讀取Excel文件并寫入數據庫
   /**
     * 讀取Excel數據
     *
     * @return List<Country>
     */
    private static List<Country> readExcel() {
        List<Country> countryList = new ArrayList<>();
        try {
            InputStream is = ExcelApplication.getContext().getAssets().open("country_information.xls");
            Workbook book = Workbook.getWorkbook(is);
            book.getNumberOfSheets();
            // 獲得第一個工作表對象
            Sheet sheet = book.getSheet(0);
            int Rows = sheet.getRows();
            for (int i = 1; i < Rows; ++i) {
                //將每一列的數據讀取
                String id = (sheet.getCell(0, i)).getContents();
                String areaCode = (sheet.getCell(1, i)).getContents();
                String subName = (sheet.getCell(2, i)).getContents();
                String nameCn = (sheet.getCell(3, i)).getContents();
                String nameEn = (sheet.getCell(4, i)).getContents();
                String capitalCn = (sheet.getCell(5, i)).getContents();
                String capitalEn = (sheet.getCell(6, i)).getContents();
                countryList.add(new Country(Long.valueOf(id), areaCode, subName, nameCn, nameEn, capitalCn, capitalEn));
            }
            book.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return countryList;
    }

最后一點,別忘了配置權限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

忘了說一點,讀取的Excel一定是97-2003的.xls文件,如果非此版本,需要另存為該版本再來讀取,否則讀取會異常和報錯,

最后讀取Excel的Jar包下載地址,提取密碼:nibf,希望該文章能幫助到需要的人,共同學習。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。