[RPA]UiPathでExcelファイルを読み込んでみた[使用頻度:高]

## [0]はじめに
Zitanです。
RPAでよく使いそうな操作といったら、Excel操作が最初に思いつきます。
Excelのデータを何らかのシステムに転記するというのは、一般事務職の人あるあるだと思います。
一気に大きなことをして挫折するのは勿体ないので、まずはExcelファイルを読み込んでみました。

## [1]事前準備

<b>[1-1]新規プロセスを作成する</b>
[![Image from Gyazo](https://i.gyazo.com/56ae8eb7d9be131268d179a05ea07135.gif)](https://gyazo.com/56ae8eb7d9be131268d179a05ea07135)

<b>[1-2]「パッケージを管理」から「UiPath.Excel.Activities」をインストールする</b>
<img width="800" alt="パッケージインストール" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/97b02af8-2068-bd3f-9a87-26ec77a3a4e0.png">

<b>[1-3]読み込むExcelファイルを用意する</b>
デスクトップにフォルダを作成してその中にExcelファイル「経費データ.xlsx」を作成します。中身はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/b012ff7d-a534-0923-3347-da7126c06b6c.png)

## [2]作ってみる
<b>[2-1]アクティビティからデザイナーパネルにフローチャートをドラッグアンドドロップする</b>
デザイナーパネルとは真ん中のウインドウのことです。「ここにアクティビティをドロップ」という場所にあたります。
[![Image from Gyazo](https://i.gyazo.com/269e46966addf34f691959bcb1675bfc.gif)](https://gyazo.com/269e46966addf34f691959bcb1675bfc)

<b>[2-2]Excelアプリケーションスコープをフローチャート内にドラッグアンドドロップする</b>
Excel操作に関するアクティビティです。
[![Image from Gyazo](https://i.gyazo.com/30a264e2765ac8710e5d265966dea8ec.gif)](https://gyazo.com/30a264e2765ac8710e5d265966dea8ec)

操作したいExcelファイルのフルパスを入力します。
右側のプロパティウィンドウでは、
・ExcelファイルをVisible(可視化)
・変更内容を自動的に上書き保存
等の詳細オプションを設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/d56dc9ff-91df-931c-aa3f-9ad9a9808de8.png)
注意すべきことは、Excelファイルは、表示名「Excelアプリケーションスコープ」の外に出た瞬間に自動的に閉じるということです。
実行すれば分かりますが、Excelファイルが開かないぞ？と思うかもしませんが、スコープの外に出た瞬間に自動的に閉じるので処理が早すぎて見えないだけです。

こういう場合は、デバッグタブから、「ステップイン」で一つずつ処理を追って確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/3b7bcb81-661b-30f0-6e8c-1e6a96e42979.png)

<b>[2-3]Excelアプリケーションスコープ内にアクティビティ「範囲を読み込み」を追加する</b>
読み込むのは経費.xlsxのSheet1のデータが入っているセル全体です。
読み込んだデータセル（テーブルと呼びます）を後で使うため一時的に変数に格納します。

Excelデータを読み込む場合は、DataTable型を使用します。DataTable型の選択方法は[2-4]で説明しています。
変数名はデータテーブルであることが分かるように、「dtExcelSheet_1」としました。
読み込む前は空なので既定値には何も設定していません。
アクティビティ「範囲を読み込み」の出力はデータテーブル「dtExcelSheet_1」を入力します。
これによって、読み込んだExcelデータテーブルを別のところで再利用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/0ddc860d-aa76-2641-9013-f8a60e1775b4.png)

<b>[2-4]ExcelデータはSystem.Data配下のDataTable型にの変数に格納する</b>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/35573801-359a-3de5-d153-fb8b63b3b0a7.png)


<b>[2-5]特定のテーブルデータをログに出力する</b>
読み込んだデータテーブルの中の特定の要素を取り出してみます。
デバッグモードで出力のウィンドウに注目して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/0a0deb80-4c13-23e1-e08c-61eb02374602.png)

アクティビティ「1行を書き込み」を追加します。これはログに書き込むためのアクティビティのようです。
こんな式を入れて下さい。セルの行と列を指定してテキスト型に変換しています。
「<font color="Red">dtExcelSheet_1.Rows(1).Item(0).ToString</font>」
式はテキスト型指定です。
セルの中身が数値とテキストが混在していることがあるので「ToStting」で型変換しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/f6888968-2980-556a-f013-549186b2355d.png)

## [3]<b>Rows(1).Item(0)で取得したデータの実行結果です。</b>
<font color="red"><b><パターン1>アクティビティ「範囲を読み込み」のプロパティで「ヘッダーを追加」でチェックを入れている</b></font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/32a8fa73-d4a2-a170-f640-45506391d921.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/0d3de7dc-9a0f-4d45-0839-6b07642a5ad7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/f9e75081-e446-9382-0809-b39c89719477.png)
B2セルの値が取得されました。
<br>
<br>

<font color="red"><b><パターン2>アクティビティ「範囲を読み込み」のプロパティで「ヘッダーを追加」でチェックを外している</b></font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/30cc7053-29e5-da51-7308-fc6b2f2bba73.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/ce13fc64-1ce4-65ba-b07a-e35f2bbda2f5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1408638/c2e45599-41b9-da9b-fc06-6b7f016851b7.png)
B1セルのヘッダーの値が取得されました。

## [4]まとめ
いかがでしょうか。
この次は、今回の内容に続いて、Excelのデータをテキストエディタに書き込んでみようと思います。
今回は長くなってしまうので、このへんで。。