はじめに
"脱Excel"が騒がれる昨今ですが、なんだかんだExcelって便利ですよね。
ということで、"脱Excel"を掲げるPleasanterとExcelをAPIで接続してみました。
やること
ExcelVBAからAPI発行して、Pleasanterに接続、情報を取得してExcelに展開します。
準備
ExcelVBA
VBAでJSONを扱うため、VBA-JSONのライブラリをインポート
(その他の方法でもJSONを扱えるようにしておけばOKのはず)
PleasanterのAPI
APIの利用方法は以下マニュアルを参照してください。
https://pleasanter.org/manual?category=2100
読み込み対象となるPleasanterのレコード
読み込み用に以下にようなテーブルを用意しました。これを取得しExcelに展開します。
VBAの実装
実装サンプル、特定のシートで実行します。
(APIキーや、サイトIDは適宜設定してください)
Dim jsonRequest As Object
Dim parseResponse As Object
Dim httpRequest As Object
'---------------------------------
' リクエストパラメータを生成
'---------------------------------
Set jsonRequest = New Dictionary
'JSONデータをDictionaryオブジェクトに設定
'-->JSONのパラメータはマニュアル参照
jsonRequest.Add "ApiVersion", "1.1"
jsonRequest.Add "ApiKey", "XXXXXXXXXX..."
jsonRequest.Add "View", New Dictionary
jsonRequest("View").Add "ColumnFilterHash", New Dictionary
'ClassAが「こ」と「き」のレコードを抽出対象と設定
jsonRequest("View")("ColumnFilterHash").Add "ClassA", "[""こ"",""き""]"
'HTTPヘッダ部を生成(これもマニュアル参照)
Set httpRequest = CreateObject("msxml2.xmlhttp")
httpRequest.Open "POST", "http://localhost/pleasanter/api/items/{サイトID}/get", False
httpRequest.setRequestHeader "Content-Type", "application/json;charset=utf-8"
'---------------------------------
' リクエスト発行
'---------------------------------
'パラメータをJSONにコンバート(VBA-JSON)してからsend
httpRequest.send JsonConverter.ConvertToJson(jsonRequest)
'---------------------------------
' レスポンスを編集
'---------------------------------
'レスポンスをパース(VBA-JSON)
Set parseResponse = JsonConverter.ParseJson(httpRequest.responseText)
'取得件数0件のとき
If parseResponse("Response")("Data").Count <= 0 Then
Exit Sub
End If
i = 1
For Each responseData In parseResponse("Response")("Data")
'取得できた値をセルへ転記(→Title、ClassA、ClassB、ClassC)
Worksheets(ActiveSheet.Name).Cells(i, 1).Value = responseData("Title")
Worksheets(ActiveSheet.Name).Cells(i, 2).Value = responseData("ClassHash")("ClassA")
Worksheets(ActiveSheet.Name).Cells(i, 3).Value = responseData("ClassHash")("ClassB")
Worksheets(ActiveSheet.Name).Cells(i, 4).Value = responseData("ClassHash")("ClassC")
i = i + 1
Next
実行結果
あとは
Excelに取り込んでしまえば、関数を使って計算したり集計したり自由自在です。
各種パラメータも、セルから設定できるようにVBAで仕込むこともできます。
計算した結果を、Pleasanterに登録するなんてこともできるはずです。