【5分でできる】Automation Anywhere A2019でCSVファイルを読み込む

# 概要
クラウド型RPAソフトウェアのAutomation Anywhere A2019では、[無料のCommunity Edition](https://qiita.com/RPAbot/items/2a2d94eeab641dfa6516)[^1]が利用できます。そして、ExcelやCSVなどの身近なファイルを扱うロボットを簡単に作成できます。今回は、CSV ファイルを読み込み、1行ずつ中身を表示してみたいと思います。5分もあればロボットを作成することができます。

[^1]: 無料で使うためには条件があります。250名未満の小規模企業か、開発者であることなど。詳しくは[Community Editionの解説](https://qiita.com/RPAbot/items/2a2d94eeab641dfa6516)ページをご覧ください。

### 利用環境
Automation Anywhere A2019 Community Edition ビルド1598

# 作成するロボット
以下のCSVファイルをヘッダーを付けてUTF8で読み込み、その後 Message Box で1行ずつ表示していくようにします。CSVファイルは`d:\input.csv`に配置します。

|ユーザー名|姓|名|会社名|電子メールアドレス|パスワード|
|:--|:--|:--|:--|:--|:--|
|akiko.yosano|与謝野|晶子|株式会社アールピーエー|`akiko.yosano@rpa.org`|9sbfJLE7|
|ichiyo.higuchi|樋口|一葉|竹倉部株式会社|`ichiyo.higuchi@takekurabe.com`|cqR3JuE3|
|jun-ichiro.tanizaki|谷崎|潤一郎|オートメーション株式会社|`jun-ichiro.tanizaki@automation.jp`|iRLmuEdp|
|kenji.miyazawa|宮沢|賢治|銀河鉄道株式会社|`kenji.miyazawa@ginga.ly`|gPDePfZW|
|ohgai.mori|森|鴎外|株式会社林太郎|`ohgai.mori@rintaro.org`|rwfnbcXx|
|osamu.dazai|太宰|治|レストランメロス|`osamu.dazai@merosu.com.au`|6JEGHP2J|
|ryunosuke.akutagawa|芥川|龍之介|ノーズエレクトロニクス|`ryunosuke.akutagawa@n-ele.com`|p7gPdXb2|
|shiki.masaoka|正岡|子規|ホトトギスコミュニケーションズ|`shiki.masaoka@hototogisu.com`|aZJv8Us8|
|soseki.natsume|夏目|漱石|坊ちゃん株式会社|`soseki.natsume@bocchan.org`|C6U2LarS|
|yukichi.fukuzawa|福沢|諭吉|ケイオウ商会株式会社|`yukichi.fukuzawa@ko-shokai.jp`|QqabeQ96|

Control Roomの「マイBot」で、新しくファイル名 (たとえば「Read CSV」など) をつけてロボットを作成しておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/c5fd1eaa-9412-c317-e539-3d76ec3f146b.png)

# 使うアクション
[CSV](https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/aae-client/bot-creator/commands/cloud-csv-text-command.html?_LANG=jpjp)を扱うアクションは以下の3つがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/5a702e81-be2c-82e7-8466-37c08116ba35.png)

加えて、[LOOP](https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/aae-client/bot-creator/commands/cloud-loop-command.html?_LANG=jpjp)、[Message Box](https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/aae-client/bot-creator/commands/cloud-message-box-command.html?_LANG=jpjp) のアクションも使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/2520922c-683c-b1fc-5e69-ca12a8541405.png)


また、今回、簡単な解法が2通り存在します。やり方によっては [Data Table](https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/aae-client/bot-creator/commands/cloud-data-table-command.html?_LANG=jpjp) も使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/566eac1d-98bd-0e64-56a0-4d9e7002900a.png)

# 解法1. CSVをLOOPで1行ずつ読み込む方法

今回のように、CSVから読み込んだデータを再活用せずに単純にメッセージボックスで表示するだけであれば、1行ずつCSVから読み込んで都度表示する方法が簡単です。

### 1-1. CSVファイルの指定部分を作成 (1-1と同じ)
フローの左側のアクションパレットから「CSV/TXT」グループの中の「開く」をフローの開始と終了の間にドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/0d18f204-552d-02c0-b2d4-cccd8e70acb7.png)
「CSV/TXT: 開く」アクションがフローに追加されたら、これを選択して「アクションの詳細」から以下のものを設定します。

* **ファイルパス**: `デスクトップファイル`を選択して、「参照」ボタンをクリック、しばらくしてファイル選択ダイアログボックスが表示されるので、`d:\input.csv` を選択します。
* **ヘッダーを含む**: チェックボックスをONにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/91bd5a39-6236-d4da-a4ed-ea3f7afdd887.png)
終わったら、「アクションの詳細」ペインの右上にある「適用」ボタンをクリックして保存してください。

### 1-2. CSVレコードの列挙ループの作成
次に、CSVファイルの中身が10人分のアカウント情報なので、この分だけ繰り返しを行うループの処理を作成します。10件という回数は、ファイルを動的に読み込んで判断するため、実際の実行時にはCSVファイルに何件データが含まれていてもかまいません。

アクションパレットの「ループ」グループから「ループ」アクションを終了の直前にドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/bc02fec3-18bd-d5c0-6607-50805eae5558.png)

ループアクション生成直後にアクションの詳細を見ると「反復子」=n回の繰り返しになっています。このドロップダウンの中身を見てみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/4e806f42-601f-58c1-3a36-b2a2d42e0a1f.png)
「CSV/TXTの各行に対して」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/adf1c60f-61a5-7a4d-e525-0ee789ac3164.png)

「この変数に現在の行を代入」の「変数の作成」ボタンをクリックします。このアクションにより、CSVを1行ずつ読み込んで、レコード型 (記録となっていますが...)の変数 (1次元配列) に格納します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/74945846-5c86-872d-b989-c3f1dcc88f2e.png)

「変数を作成」で名前をrecordsとつけ、「Create & Select」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/8b1f53e1-5ece-4412-ca86-9e977564072c.png)
その後、アクションの詳細の右上の「適用」ボタンをクリックしてください。フローの中のループを選択した状態で以下のような画面となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/2af1dba0-eba1-fd15-564c-21716eb81fd1.png)

### 1-3.レコードの表示部分の作成
ループの中に、レコードを表示するメッセージボックス表示アクションを作成します。
アクションパレットの「メッセージボックス」グループから「メッセージボックス」アクションをループの囲いの中にドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/a10ae765-293d-340f-5f44-7bdd7c7e568f.png)
メッセージボックスアクションの詳細で、「表示するメッセージを入力します」にテキストを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/5deb8c96-0995-72a0-92a0-36da99a285ab.png)

入力するテキストは以下の通りです。`$records[0]$`は、レコード型変数の最初の要素で、CSVの最初の列が「ユーザー名」であるため、ユーザー名が表示されます。以下、カンマで区切って、次の要素を書いていきます。

```
$records[0]$,$records[1]$,$records[2]$,$records[3]$,$records[4]$,$records[5]$
```
その後、アクションの詳細の右上の「適用」ボタンをクリックしてください。

次に、現在開いているCSVファイルセッション「Default」を閉じるアクションを終了の前に挿入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/31e05518-fd3d-f9ba-b211-e996677fe554.png)

最後に、画面右上の「保存」ボタンをクリックします。

### 1-4.完成!
さあ、完成です。以下のようなフローが完成しましたね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/0cc9c861-04af-51c0-fc96-fa01249893e8.png)

リストで見ると以下のような形です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/fb4819b7-919c-6255-3aa6-b38440025758.png)



### 1-5.ロボットの実行
「Run」ボタンでロボットを実行してみましょう。
すると、以下のように、10回、レコードの内容がメッセージダイアログボックスで表示されます。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/ac4e0a47-c169-f57d-36bd-75b220bf2e04.png)
最後に以下のメッセージが表示されれば正常終了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/427a3cb4-04bf-18eb-6c2c-aad35e450687.png)



# 解法2. CSVを一気にData Tableに読み込む方法
CSVデータはData Tableに一気に読み込んでおくと、後での活用の幅が広がるため、お勧めの方法です。先ほどの解法と似ていますが、Data Tableにいったんデータを読み込む分だけステップが増えます。

### 2-1. CSVファイルの指定部分を作成
フローの左側のアクションパレットから「CSV/TXT」グループの中の「開く」をフローの開始と終了の間にドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/0d18f204-552d-02c0-b2d4-cccd8e70acb7.png)
「CSV/TXT: 開く」アクションがフローに追加されたら、これを選択して「アクションの詳細」から以下のものを設定します。

* **ファイルパス**: `デスクトップファイル`を選択して、「参照」ボタンをクリック、しばらくしてファイル選択ダイアログボックスが表示されるので、`d:\input.csv` を選択します。
* **ヘッダーを含む**: チェックボックスをONにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/91bd5a39-6236-d4da-a4ed-ea3f7afdd887.png)
終わったら、「アクションの詳細」ペインの右上にある「適用」ボタンをクリックして保存してください。

### 2-2. CSVからData Tableへファイルを読み込む部分の作成
アクションパレットから「CSV/TXT」グループの中の「読み取り」をフローの終了の直前にドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/f1b7e5c8-700c-3788-e9af-8e2b62ed5b41.png)

「CSV/TXT: 読み取り」アクションがフローに追加されたら、これを選択して「アクションの詳細」から「値を変数に代入」の右側の「変数を作成」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/f87856f1-42db-2ae6-7aa6-1b8242208d33.png)

「変数を作成」の画面で、変数に名前を付けて (たとえば「dataTable」)、「Create & Select」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/efcdd363-2af4-bfa9-1d13-64a761a9fec0.png)

「CSV/TXT: 読み取り」アクションの「アクションの詳細」ペインの右上にある「適用」ボタンをクリックして保存してください。

次に、現在開いているCSVファイルセッション「Default」を閉じるアクションを終了の前に挿入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/ac3d8f65-116c-a1b0-a101-8acc9590fe44.png)

### 2-3. Data Tableの中身の表示ループの作成
次に、CSVファイルの中身が10人分のアカウント情報なので、この分だけ繰り返しを行うループの処理を作成します。10件という回数は、ファイルを動的に読み込んで判断するため、実際の実行時にはCSVファイルに何件データが含まれていてもかまいません。

アクションパレットの「ループ」グループから「ループ」アクションを終了の直前にドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/ed62c335-33f4-2bca-7fa7-68becd6cf426.png)
ループアクション生成直後にアクションの詳細を見ると「反復子」=n回の繰り返しになっています。このドロップダウンの中身を見てみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/05d56beb-4e23-9907-164c-b14fb6235018.png)

「Data table: For each row in table」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/1fdb8d66-808b-6570-e35e-c1db9fac7489.png)
「Table Variable」に、先ほど作成したdataTable変数をドロップダウンリストから選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/a0b3e8e8-620a-2b56-8f5f-a09561253c9d.png)
次に「Assign the current row to this variable」の「変数の作成」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/0ca8491b-30b7-7280-b267-18e094504eb3.png)
「変数を作成」で名前をrecordsとつけ、「Create & Select」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/8b1f53e1-5ece-4412-ca86-9e977564072c.png)
その後、アクションの詳細の右上の「適用」ボタンをクリックしてください。フローの中のループを選択した状態で以下のような画面となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/e4a94d42-3adb-09ca-fac1-653eafebb42c.png)

### 2-4.レコードの表示部分の作成
ループの中に、レコードを表示するメッセージボックス表示アクションを作成します。
アクションパレットの「メッセージボックス」グループから「メッセージボックス」アクションをループの囲いの中にドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/7c158655-1405-c5ea-a287-50287963b5aa.png)

メッセージボックスアクションの詳細で、「表示するメッセージを入力します」にテキストを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/5deb8c96-0995-72a0-92a0-36da99a285ab.png)

入力するテキストは以下の通りです。`$records[0]$`は、レコード型変数の最初の要素で、CSVの最初の列が「ユーザー名」であるため、ユーザー名が表示されます。以下、カンマで区切って、次の要素を書いていきます。

```
$records[0]$,$records[1]$,$records[2]$,$records[3]$,$records[4]$,$records[5]$
```
その後、アクションの詳細の右上の「適用」ボタンをクリックしてください。

最後に、画面右上の「保存」ボタンをクリックします。

### 2-5.完成!
さあ、完成です。以下のようなフローが完成しましたね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/be5cf02f-aad8-9231-c117-bc4a95c8a1a0.png)


リストで見ると以下のような形です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/be987640-e6bd-abf8-9ebb-3e4df60fec71.png)


### 2-6.ロボットの実行
「Run」ボタンでロボットを実行してみましょう。
すると、以下のように、10回、レコードの内容がメッセージダイアログボックスで表示されます。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/ac4e0a47-c169-f57d-36bd-75b220bf2e04.png)
最後に以下のメッセージが表示されれば正常終了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/427a3cb4-04bf-18eb-6c2c-aad35e450687.png)


# まとめ
いかがでしたか。CSVの読み込みは後で読み込んだデータをどう活用したいかにより、大きく2通りのやり方があります。いずれの方法も、やり方の考え方さえ掴んでしまえば5分もあれば完成させることができますよ。試してみてください！

> **v11との比較**:前のバージョンでの操作は、`$Filedata Column(列番号)$`という専用のシステム変数で値を参照していましたが、A2019ではレコード型変数を定義して値を格納するように変更になりました。