スポンサーリンク

【pleasanter/VBA】エクスポート⑤並べ替え

プリザンター
スポンサーリンク
※当サイトは広告を含みます

エクセルVBAでプリザンターから情報取得、シリーズ。第5回です。

前回まではVBAでエクスポートする基本、絞り込み条件の指定方法などをやりました。今回はデータ取得時に並べ替えもできちゃうそうなので、それをやってみようと思います。
なお、VBAでのエクスポートのやり方、フィルター条件のやりかたは割愛しますので、前回までの記事を参照してください。

※おことわり
2023年7月時点の情報です。プリザンターのバージョンは 1.3.20.0 です。Google Chrome でやっています。
javascript,html,cssともに初心者です。調べながら、やってみながら、きっとこうすればいいんだ!という感じで書いていますので、間違っている場合、効率的な書き方ではない可能性が大いにあります。間違ってるよ!とか、こうしたほうがいいよ!ということがありましたら、コメント等で教えていただけると大変ありがたいです。

1.使用するサイト

前回と同じです。

2.並べ替え ソート

こちらの記事を参考にしてやってみました。
開発者向け機能:JSONデータレイアウト:View

ColumnSorterHashの指定方法
ソート順は asc(昇順)/desc(降順) のどちらかを指定します。
JSONでは{“項目名”:”ソート順”}のペア{“DateA”:”asc”, “ClassA”:”desc”}で指定します。

引用元:https://pleasanter.org/manual/api-view

View で ColumnSorterHash を指定すると、並べ替えができるようです!昇順が asc、降順が desc ですね。

3.やってみた

(1)日付Aの昇順で並べ替えを指定

jsonRequest.Add "View", New Dictionary
jsonRequest("View").Add "ColumnSorterHash", New Dictionary
jsonRequest("View")("ColumnSorterHash").Add "DateA", "asc"

(2)分類A昇順、日付A降順

並べ替えの優先順位は、指定した順になるようです。以下の例では優先順位はClassAが1番目、DataAが二番目となります。

jsonRequest.Add "View", New Dictionary
jsonRequest("View").Add "ColumnSorterHash", New Dictionary
jsonRequest("View")("ColumnSorterHash").Add "ClassA", "asc"
jsonRequest("View")("ColumnSorterHash").Add "DateA", "desc"

4.絞り込み条件と、並べ替えを同時指定

分類Aが100、分類A昇順、日付A降順

jsonRequest.Add "View", New Dictionary
jsonRequest("View").Add "ColumnFilterHash", New Dictionary
jsonRequest("View")("ColumnFilterHash").Add "ClassA", "[""100""]"
jsonRequest("View").Add "ColumnSorterHash", New Dictionary
jsonRequest("View")("ColumnSorterHash").Add "ClassA", "asc"
jsonRequest("View")("ColumnSorterHash").Add "DateA", "desc"

5.コード全文

しつこいようですが、3の分類Aが100、分類A昇順、日付A降順でエクスポートするコード全文です。コピペして利用する際はapikey、サイトIDの部分は実際のapiキー、サイトIDに変更してください。

Sub pleasanter_export6()
    Const myApikey As String = "1234abcde"    '実際のapiキーに変更してください
       
    Dim jsonRequest     As Dictionary
    Dim parseResponse   As Dictionary
    Dim httpRequest     As Object
    
    Set jsonRequest = New Dictionary
    
    jsonRequest.Add "ApiVersion", "1.1"
    jsonRequest.Add "ApiKey", myApikey
    
    '******* ここからフィルターを設定 ************
    jsonRequest.Add "View", New Dictionary
    jsonRequest("View").Add "ColumnFilterHash", New Dictionary
    'jsonRequest("View")("ColumnFilterHash").Add "ClassA", "[""100""]"
    jsonRequest("View").Add "ColumnSorterHash", New Dictionary
    jsonRequest("View")("ColumnSorterHash").Add "ClassA", "asc"
    jsonRequest("View")("ColumnSorterHash").Add "DateA", "desc"

    '**************** ここまで *******************
    
    Set httpRequest = CreateObject("msxml2.xmlhttp")
    '426は実際のサイトIDに変更してください
    httpRequest.Open "POST", "http://localhost/api/items/426/get"
    httpRequest.setRequestHeader "Content-Type", "application/json;charset=utf-8"
    
    httpRequest.send JsonConverter.ConvertToJson(jsonRequest)
    
    Do While httpRequest.readyState < 4
        DoEvents
    Loop

    Set parseResponse = JsonConverter.ParseJson(httpRequest.responseText)
    
    If parseResponse("Response")("Data").Count <= 0 Then
        MsgBox "なし"
        Exit Sub
    End If
    
    Dim responseData As Variant
    Dim i As Long: i = 2
    For Each responseData In parseResponse("Response")("Data")
        With ActiveSheet
            .Cells(i, 1).Value = responseData("Title")
            .Cells(i, 2).Value = responseData("ClassHash")("ClassA")
            .Cells(i, 3).Value = responseData("ClassHash")("ClassB")
            .Cells(i, 4).Value = responseData("ClassHash")("ClassC")
        End With
        i = i + 1
    Next

    MsgBox "出力完了"
End Sub

6.さいごに

コツをつかんでしまうと簡単ですね!

7.参考記事など

開発者向け機能:JSONデータレイアウト:View

プリザンザンターVBAエクスポートシリーズ
【pleasanter/VBA】エクセルからプリザンターのデータを取得する
【pleasanter/VBA】エクセルからプリザンターのデータを取得する②絞り込み条件の指定
【pleasanter/VBA】エクセルからプリザンターのデータを取得する③変数で絞り込み条件を指定する
【pleasanter/VBA】エクスポート④絞り込み条件で〇〇を含むを指定する
【pleasanter/VBA】エクスポート⑤並べ替え(今回)
【pleasanter/VBA】エクスポート⑥表示名を出したい
【pleasanter/VBA】エクスポート⑦データがちょん切れる時の対応 Offset
【pleasanter/VBA】エクスポート⑧出力される日付を文字列ではなく日付時刻型で出したい
【pleasanter/VBA】エクスポート⑨汎用ツールを作ってみた
【pleasanter/VBA】エクスポート⑩汎用ツール増強版

VBAでインポート
【pleasanter/VBA】エクセルからプリザンターへデータを追加、更新する~import~

コメント

タイトルとURLをコピーしました