FAQ:ExcelからPleasanterへアクセスしたい
## 回答
Excel VBAにてプリザンターのAPIを実行してください。
---
## 概要
Excel VBA から Pleasanter の API にアクセスする方法をについサンプルをコードつきでご紹介します。
以下では、デモサイトの「商談」テーブルのレコードを、"状況"でフィルタして取得し、シートに転記する例をご案内いたします。
## 前提条件
### VBA が利用可能であること
マクロを有効にしたブックの利用や VBA そのものの利用については、ユーザ側で対応可能であるものとします。
### VBA で利用するライブラリ
Pleasanter API では問い合わせ時のパラメータおよびレスポンスは JSON で構成します。
以下のサンプルでは VBA-JSON および VBA-Dictionary を利用してデータを解釈しますため、マクロに含めていただく必要がございます。
1. [VBA-tools/VBA-JSON: JSON conversion and parsing for VBA](https://github.com/VBA-tools/VBA-JSON)
2. [VBA-tools/VBA-Dictionary: Drop-in replacement for Scripting.Dictionary on Mac](https://github.com/VBA-tools/VBA-Dictionary)
VBA-JSON および VBA-Dictionary については、Pleasanter のプロダクトに含まれないことについてあらかじめご確認ください。
### デモ環境への登録
- [デモ環境](https://demo.pleasanter.org/)に登録済みであり、ログイン可能であること
## 手順
### ブラウザからの確認
1. [デモ環境](https://demo.pleasanter.org/)にログインします。
![image](https://pleasanter.org/binaries/f205353e71d24fc889ea4f367bf4447c)
2. 「商談管理の例」フォルダをクリックします。
![image](https://pleasanter.org/binaries/f6e22990d128406792611421f4856592)
3. 「商談」テーブルをクリックします。
![image](https://pleasanter.org/binaries/ed0f842247e3490c9aa4e692defc4140)
4. デモ用のサンプルデータをご確認ください。
![image](https://pleasanter.org/binaries/1849be0025a0467db88375b042c09517)
### VBA でのデータ取得
以下のコードを VBA のエディタに貼り付けて SampleCode Sub プロシージャを実行します。
処理概要は以下のとおりです。
1.リクエストパラメータを作成
2.リクエストを発行
3.レスポンスをシートに転記
#### サンプルコード
```vb
Private Sub SampleCode()
''' 環境ごとに設定が必要な値
' -------- 1
' https://demo.pleasanter.org/users/editapi の API キー欄の値をコピーします。空白の場合 "作成" ボタンを押して生成します。
Const APIKEY As String = " ここに API キーを文字列として記入します "
' -------- 2
' デモサイトにて「商談管理の例」>「商談」を開き、その URL の以下の数値を 0 に置き替えます。
' https://demo.pleasanter.org/items/_ここにある数値_/index
Const SiteID As Long = 0
' -------- 3
' シート名を指定します。ここでは仮に Sheet1 としています。
Dim SheetName As String
SheetName = "Sheet1"
'''
Dim jsonRequest As Dictionary
Dim parseResponse As Dictionary
Dim httpRequest As Object
Dim i As Integer
Dim j As Integer
Dim Sheet As Worksheet
Set Sheet = Worksheets(SheetName)
Dim Hashs As Dictionary
'---------------------------------
' 1. リクエストパラメータを生成
' リクエストパラメータとして利用するデータを Dictionary オブジェクトとして作成します。
'---------------------------------
Set jsonRequest = New Dictionary
jsonRequest.Add "ApiVersion", "1.1"
jsonRequest.Add "ApiKey", APIKEY
jsonRequest.Add "View", New Dictionary
jsonRequest("View").Add "ColumnFilterHash", New Dictionary
' "状況"でフィルタします。ここでは"引き合い"と"提案"に対応するコード値を指定しています。
jsonRequest("View")("ColumnFilterHash").Add "Status", "[""100"",""150""]"
Set httpRequest = CreateObject("MSXML2.XMLHTTP")
httpRequest.Open "POST", "https://demo.pleasanter.org/api/items/" & SiteID & "/get", False
httpRequest.setRequestHeader "Content-Type", "application/json;charset=utf-8"
'---------------------------------
' 2. リクエストを発行
' Dictionary を JSON 形式に変換してリクエストを実施します。
'---------------------------------
httpRequest.send JsonConverter.ConvertToJson(jsonRequest)
'---------------------------------
' 3. レスポンスをシートに転記
' API の応答結果である JSON を辞書から読み出してシートに転記します。
'---------------------------------
Set parseResponse = JsonConverter.ParseJson(httpRequest.responseText)
Set Records = parseResponse("Response")("Data")
' 取得件数が 0 件のときは中断
If Records.Count <= 0 Then
Exit Sub
End If
' シートに転記
Sheet.Cells.Clear
i = 2
For Each Record In Records
j = 1
With Sheet
For Each ColumnName In Record.Keys()
If ColumnName = "ApiVersion" Or ColumnName = "Comments" Or ColumnName = "AttachmentsHash" Then
GoTo ContinueTarget:
ElseIf Right(ColumnName, 4) = "Hash" Then
For Each HashColumn In Record(ColumnName).Keys()
Set Hashs = Record(ColumnName)
.Cells(1, j).Value = HashColumn
.Cells(i, j).Value = Hashs(HashColumn)
j = j + 1
Next
Else
.Cells(1, j).Value = ColumnName
.Cells(i, j).Value = Record(ColumnName)
j = j + 1
End If
ContinueTarget:
Next
End With
i = i + 1
Next
End Sub
```
#### 実行例
![image](https://pleasanter.org/binaries/5031deb75d4d48c99bf854dc3db1b2f7)
## 応用
ここでは読み取りの例をご紹介いたしました。
こちらをご参考にしていただき、[APIレコード作成](/manual/api-record-create)や[APIレコード更新](/manual/api-record-update)の仕様に対応するリクエストパラメータを構築していただくことで Excel から Pleasanter へデータを登録したり、更新したりすることも可能です。