【RPA発展】UiPathの使い方(7)~HTTPリクエストでスプレッドシートのデータを取得

RPAの発展として、UiPathの実践的な使い方を紹介していきます。今回は、HTTPリクエストを使用して、Googleスプレッドシートのデータを取得(読み込み)したいと思います。Web APIの仕組みを活用します。

単にスプレッドシートを操作するだけなら、コミュニティチームが提供している、スプレッドシートを扱う専用のアクティビティ(UiPathTeam.GoogleSpreadsheet.Activities)も使用できます。

本記事では、HTTPリクエストを使用して、スプレッドシートのデータを取得する方法を紹介します。また、JSONデータの処理方法も説明したいと思います。

Web Activitiesパッケージ

【Step.1】UiPathを起動

先ずは、PCにインストールしているUiPathを起動して、空のプロジェクト(Blank)を作成します。

create project

【Step.2】Web.Activitiesパッケージのインストール

(※既にインストール済みの場合は省略可)

UiPathでHTTPリクエストを使用したり、JSONデータを処理するためには、Web.Activitiesパッケージをインストールします。「Manage Packages」のボタンをクリックします。

manage packages

別ウィンドウで開かれた設定画面の左メニューの「Official」をクリックして選択します。次に、検索窓に「web」と入力します。検索結果欄に表示された「UiPath.Web.Activities」をクリックして選択します。

右メニューの「install」ボタンをクリックしてパッケージをインストールします。最後に、「Save」ボタンを押して完了です。なお、Saveの際に、ライセンス確認がありますので、一読してから同意しましょう。

install package

スプレッドシートのデータを取得

【Step.3】スプレッドシートの作成

スプレッドシートを新規作成し、下記のようなテーブルデータを準備します。

create spreadsheet

【Step.4】Web APIの設定

HTTPリクエストを使用して、スプレッドシートのデータを取得するためには、事前にスプレッドシートのWeb APIを設定しておく必要があります。APIの設定は、Google Cloud Platform(GCP)から行います。

詳細は割愛しますが、下記の手順でWeb APIの設定を行います。

  1. GCPのアカウント作成
  2. Spreadsheet APIの有効化
  3. APIキーの作成(またはOAuth 2.0認証)

上記の設定を行い、「APIキー」または「OAuth 2.0のアクセストークン」のどちらかを取得します。ただし、アクセストークンの取得プロセスは複雑です。テスト的に行うのであれば、対象のスプレッドシートに全員がアクセスできるように設定すれば、APIキーで簡単にデータ取得ができます。

access setting

APIキーを公開したり、他人に教えたりしてはいけません。セキュリティ的には、APIキーではなくアクセストークンを取得することを勧めます。今回は、動作確認だけなので、APIキーを使ってスプレッドシートのデータ取得を行います。

【Step.5】HTTPリクエストの設定

先ずは、HTTPリクエストの設定を行います。画面左側のアクティビティ検索窓に「http」と入力します。表示された「HTTP Request」アクティビティを、ワークフロー内にドラッグ&ドロップします。

http request

アクティビティをドラッグ&ドロップすると、別ウィンドウで設定画面が表示されます。

wizard setting

下表の通り、プロパティを設定します。

項目 備考
End Point ***** アクセスするURLです。下記参照。
Request Method GET HTTPリクエストのタイプです。今回は「GET」を設定します。
Accept Response as JSON HTTPリクエストの結果をどのタイプで受け取るか指定します。今回は「JSON」を設定します。

なお、「End Point」は下記の値を記入します。

https://sheets.googleapis.com/v4/spreadsheets/[スプレッドシートID]/values/[セル範囲]?key=[APIキー]

【実際の値】
https://sheets.googleapis.com/v4/spreadsheets/*****/values/シート1!A2:D?key=*****

[スプレッドシートID]には、Step.3で作成したスプレッドシートのIDを、[APIキー]には、Step.4で取得したAPIキーの値を記入します。[セル範囲]には、今回は「シート1!A2:D」と記入します(1行目のヘッダーは取得しない)。これで、スプレッドシートのA~D列すべてのデータが取得できます。

最後に、「HTTP Request」アクティビティのプロパティを設定します。OutPutの「Result」に、HTTPリクエストの結果を保存する変数を新規作成します。変数名は「response」としました。

result setting

【Step.6】JSONデータのデシリアライズ

HTTPリクエストで取得したスプレッドシートのデータは、JSONの「文字列」です。値を取り出しやすくするために、文字列をJSONオブジェクトに変換します。

画面左側のアクティビティ検索窓に「json」と入力します。表示された「Deserialize JSON」アクティビティを、「HTTP Request」アクティビティの下にドラッグ&ドロップします。

deserialize json

最後に、「Deserialize JSON」アクティビティのプロパティを設定します。Inputの「JsonString」に、Step.5で取得したHTTPリクエストの結果を保存した変数「response」を記入します。

続いて、Outputの「JsonObject」には、変換したJSONオブジェクトを保存する変数を新規作成します。変数名は「jsonObj」としました。

【Step.7】JSONデータの概要

Step.6で変換したJSONオブジェクトは下記のようなデータ構造になっています。

{
  "range": "'シート1'!A2:D1000",
  "majorDimension": "ROWS",
  "values": [
    [
      "0001",
      "田中 太郎",
      "男性",
      "32"
    ],
    [
      "0002",
      "山田 舞",
      "女性",
      "23"
    ],
    [
      "0003",
      "竹中 光",
      "女性",
      "41"
    ],
    [
      "0004",
      "村田 花子",
      "女性",
      "33"
    ],
    [
      "0005",
      "鈴木 良一",
      "男性",
      "38"
    ]
  ]
}

上記のJSONオブジェクトは、「range」「majorDimension」「values」の3つのキーを持っています。スプレッドシートのテーブルデータの中身は、「values」のキーで取得できます。UiPath上では、「jsonObj.GetValue(“values”)」と書きます。

【Step.8】テーブルデータの取り出し

JSONオブジェクトに保存されたテーブルデータを1行ずつ取り出して、順次処理していくために「For Each」アクティビティを使用します。

画面左側のアクティビティ検索窓に「for each」と入力します。表示された「For Each」アクティビティを、「Deserialize JSON」アクティビティの下にドラッグ&ドロップします。

for each

「For Each」のプロパティの「Values」に、テーブルデータの中身である「jsonObj.GetValue(“values”)」を入力します。また、1行ずつ取り出したレコードを一時的に保存する変数名を「row」に書き換えておきます。初期設定の「item」だと分かりにくいので。

最後に、「For Each」のプロパティの「TypeArgument」を「Newtonsoft.Json.Linq.JArray」に設定しておきます。

【Step.9】テーブルデータの表示

下図を見てください。「For Each」アクティビティでは、各レコードが変数rowに代入されます。

record

各レコードの値を参照するには、「row.Item(n).ToString」と設定します。Item(n)で、レコードのn列目の項目を取得することができます。慣習的にnは0から数え始めます。

最後のToStringは、データの型を文字列に変換するメソッドです。この辺りは深く気にせずに、おまじないだと思って割り切りましょう。

では、各レコードの中身をメッセージ画面に表示してみましょう。画面左側のアクティビティ検索窓に「box」と入力します。表示された「Message Box」アクティビティを、「For Each」アクティビティのBodyコンテナ内の先頭にドラッグ&ドロップします。

message box

最後に、「Message Box」アクティビティのプロパティで、Contentの値に下記の式を入力します。

row.Item(0).ToString + vbNewLine + row.Item(1).ToString + vbNewLine + row.Item(2).ToString + vbNewLine + row.Item(3).ToString

【Step.10】ワークフローの実行

それでは、上部パネルの「Run」をクリックし、このワークフローを実行してみましょう。

result上手く、スプレッドシートの各レコードの値を順番に表示できました。

まとめ

今回は、HTTPリクエストを使用して、Googleスプレッドシートのデータを取得しました。

下記の点を理解して、他の業務にも応用できるようにしましょう。

  • HTTPリクエストを使ってスプレッドシートのデータを取得できる
  • スプレッドシートからデータ取得するには「APIキー」または「OAuth 2.0のアクセストークン」が必要
  • スプレッドシートのデータは「JSON文字列」として取得される
  • JSONオブジェクトから各レコードを取り出せる

最後に、UiPathに関する参考図書を一冊紹介しておきます。
できるUiPath 実践RPA <amazon.co.jp>

※本書の内容はネット上でも公開されているようです(できるネット)。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする