最も一般的に使われている表計算ソフトはMS Excelです。このプログラムは、マイクロソフトのデスクトップスイートの一部として提供されています。一方、アンドロイドの話になると、モバイル開発の話になります。

もし、モバイルアプリの中にMS Excelで分析したいデータがあるとしたらどうでしょう。その場合、SQLiteデータベースからExcelにデータをエクスポートする必要があります。このチュートリアルでは、新しい方法を考案するのではなく、すでにあるソリューションを使って数分でできる方法を紹介します。

(a). 解決策1: SQLiteToExcelを使う

これは、SQLiteデータベースをExcelに変換したり、ExcelをSQLiteに変換するための軽量なライブラリです。

どうやって使うの?

ステップ1: インストール

サードパーティ製のソリューションなので、gradleでインストールする必要があります。以下の実装文を build.gradle に追加して同期します。

implementation 'com.ajts.androidmads.SQLite2Excel:library:1.0.4'

Step 2: 必要なパーミッションの追加

今回は、端末の外部ストレージからの読み込み権限が必要です。そこで、AndroidManifest.xmlに以下のパーミッションを追加します。

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

Step 3: データのエクスポート

たとえば、Sqlite データベースをデフォルトの場所にエクスポートするには、まず、SqliteToExcel クラスをインスタンス化し、コンストラクタでコンテキストとデータベース名をパラメータとして渡します。

SqliteToExcel sqliteToExcel = new SqliteToExcel(this, "helloworld.db");

カスタムの保存先にエクスポートして保存したい場合は、以下の行を使用します。

SqliteToExcel sqliteToExcel = new SqliteToExcel(this, "helloworld.db", directory_path);

1つのテーブルだけをエクスポートして,それを1つのExcelシートにエクスポートしたい場合はどうでしょうか。その場合は、exportSingleTable()関数を使って、データベースのテーブル名、エクセルシート名、そして3つのメソッドを持つコールバックを渡します。

sqliteToExcel.exportSingleTable("table1", "table1.xls", new SQLiteToExcel.ExportListener() {
     @Override
     public void onStart() {

     }
     @Override
     public void onCompleted(String filePath) {

     }
     @Override
     public void onError(Exception e) {

     }
});

また、データベースのテーブルのリストをエクセルにエクスポートしたい場合は、exportSpecificTables()関数を使います。

sqliteToExcel.exportSpecificTables(tablesList, "table1.xls", new SQLiteToExcel.ExportListener() {
     @Override
     public void onStart() {

     }
     @Override
     public void onCompleted(String filePath) {

     }
     @Override
     public void onError(Exception e) {

     }
});

データベース内のすべてのテーブルをエクセルシートにエクスポートするには、以下のように exportAllTables() 関数を使用します。

sqliteToExcel.exportAllTables("table1.xls", new SQLiteToExcel.ExportListener() {
     @Override
     public void onStart() {

     }
     @Override
     public void onCompleted(String filePath) {

     }
     @Override
     public void onError(Exception e) {

     }
});

特定の列を除外したい場合は、その列を配列リストで定義し、それを setExcludeColumns() 関数で設定し、その配列リストをこのメソッドに渡します。

ArrayList<String> columnsToExclude = new ArrayList<String>();
columnsToExclude.add("income_id");
sqliteToExcel.setExcludeColumns(columnsToExclude);
...
sqliteToExcel.export...

Excel から SQLite へのインポート方法

このライブラリでは、エクセルからSQLiteデータベースにインポートすることもできます。その場合、エクスポート時に使用した SqliteToExcel クラスではなく、ExcelToSQLite クラスを使用します。

まずは、ExcelToSQLiteをインスタント化して、コンテキストとデータベース名を渡してみましょう。

ExcelToSQLite excelToSQLite = new ExcelToSQLite(getApplicationContext(), "helloworld.db");

エクセルのインポート時にテーブルをドロップするには、次のコードを使用します。

ExcelToSQLite excelToSQLite = new ExcelToSQLite(getApplicationContext(), "helloworld.db", true);

アンドロイドのassetsフォルダからSQLiteデータベースにエクセルシートをエクスポートしたい場合は、importFromAsset()関数を使い、エクセルファイル名.xlsとインポートリスナーコールバックを渡します。

excelToSQLite.importFromAsset("assetFileName.xls", new ExcelToSQLite.ImportListener() {
    @Override
    public void onStart() {

    }

    @Override
    public void onCompleted(String dbName) {

    }

    @Override
    public void onError(Exception e) {

    }
});

ディレクトリからデータベースにExcelをインポートしたい場合は、importFromFile()関数を使い、ディレクトリパスを渡します。

excelToSQLite.importFromFile(directory_path, new ExcelToSQLite.ImportListener() {
    @Override
    public void onStart() {

    }

    @Override
    public void onCompleted(String dbName) {

    }

    @Override
    public void onError(Exception e) {

    }
});

完全な例

完全な例を ダウンロードしてください。

参考文献

以下はコードの参考リンクです。

番号 リンク
1.|コードのダウンロード
2.|続きを読む