ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

ExcelでmBaaSのマスターデータをメンテナンスする(その1 データ取得編)

f:id:mbaasdevrel:20171212211755p:plain

非公式のExcel VBA用、NCMBライブラリを作っています。クラス自体はデータストアの取得や更新、削除を行えて、ログイン機能もあります。VBAを使うことで、Excelを使ってmBaaSのデータ操作も可能です。

今回はそのサンプルとして、既存のデータストアに入っているデータをダウンロードするスクリプトを紹介します。

Excelファイルについて

ExcelファイルをRelease v0.1 · goofmint/ncmb-excelにアップロードしています。 Master.xlsm というファイルになりますので、試してみてください。

以下はコードの説明になります。

NCMBライブラリの初期化

ライブラリの初期化は以下のコードで行います。

Dim ncmb As clsNCMB
Set ncmb = New clsNCMB
ncmb.ApplicationKey = ApplicationKey
ncmb.ClientKey = ClientKey

データストアの検索

特定のクラスを検索するコードは以下のようになります。ネットワーク処理は非同期ではなく同期です。

Set dataClass = ncmb.dataStore(className)
dataClass.limit (1000)
dataItems = dataClass.fetchAll()

取得したデータは、各行においてデータが入っているカラムしか返ってきません。つまり、管理画面上で undefined になっているデータはカラム名が入っていません。そのため、取得データをすべて確認して、カラムを洗い出します。

カラムの種類として、acl/createDate/updateDateは省いています。

Public Function getHeaders(val As Variant) As String()
    Dim dataItem As clsDataItem
    Dim headers() As String
    Dim header As String
    Dim headerIndex As Integer
    headerIndex = 0
    For j = 0 To UBound(val) - 1
        Set dataItem = val(j)
        For i = 0 To UBound(dataItem.Fields.Keys)
            header = dataItem.Fields.Keys(i)
            Debug.Print header
            If header = "acl" Or header = "createDate" Or header = "updateDate" Then
            Else
                ReDim Preserve headers(headerIndex)
                If (UBound(Filter(headers, header)) = -1) Then
                    headers(headerIndex) = header
                    headerIndex = headerIndex + 1
                End If
            End If
        Next
    Next
    getHeaders = headers
End Function

シートがなければ作成

クラスは各クラス名ごとにシートを作成します。

Set classWorksheet = getOrCreateSheet(className)

シートの検索または作成を行うのは以下の関数になります。

Public Function getOrCreateSheet(name As String) As Worksheet
    Dim ws As Worksheet
    Dim exist As Boolean
    exist = False
    For Each ws In Worksheets
        If ws.name = name Then
            Set getOrCreateSheet = ws
            exist = True
        End If
    Next
    If exist = False Then
        Set getOrCreateSheet = Worksheets.Add
        getOrCreateSheet.name = name
    End If
End Function

ヘッダーの出力

まずシートにヘッダーを出力します。

For j = 0 To UBound(headers)
    classWorksheet.Cells(1, j + 1) = headers(j)
Next

さらに各行のデータを出力します。

For j = 0 To UBound(dataItems) - 1
    Set dataItem = dataItems(j)
    Set Fields = dataItem.Fields
    For column = 0 To UBound(headers)
        If Fields.Exists(headers(column)) Then
            classWorksheet.Cells(j + 2, column + 1) = Fields(headers(column))
        End If
    Next
Next

まとめ

サンプルのExcelファイルをRelease v0.1 · goofmint/ncmb-excelにアップロードしています。 Master.xlsm というファイルになりますので、試してみてください。

設定シートにアプリケーションキーとクライアントキーを設定し、同期するクラス名を記述してください。ID、パスワードがなければ認証は行いませんが、未ログインユーザでも取得できるデータだけが対象になりますのでご注意ください。

後はこのデータを編集後、逆にアップロードする機能があればマスタメンテナンスできるようになるでしょう。実装時の参考にしてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。