非公式の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、パスワードがなければ認証は行いませんが、未ログインユーザでも取得できるデータだけが対象になりますのでご注意ください。
後はこのデータを編集後、逆にアップロードする機能があればマスタメンテナンスできるようになるでしょう。実装時の参考にしてください。