LoginSignup
10
5

More than 1 year has passed since last update.

PleasanterとExcelを接続してみた

Last updated at Posted at 2021-05-31

はじめに

"脱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に展開します。
無題.png

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

実行結果

条件のとおりレコードが取得できました。
無題.png

あとは

Excelに取り込んでしまえば、関数を使って計算したり集計したり自由自在です。
各種パラメータも、セルから設定できるようにVBAで仕込むこともできます。
計算した結果を、Pleasanterに登録するなんてこともできるはずです。

10
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5