【Uipath】タブ区切りテキストをExcelファイルに変換する

### やりたいこと
タブ区切りテキストをExcelファイルに変換したい。
元々のユーザー手順としては、こんな感じでした。
Excelを立ち上げる
⇒ファイル
⇒開く
⇒テキストファイルを選択
⇒下のウインドウが出る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/ad482ceb-3df9-b07a-8d49-d67aeb19b8be.png)
⇒元のデータの形式を「カンマやタブなどの・・・」を選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/3a614ba9-64af-b2d8-9bda-b1cedb517ea5.png)
⇒区切り文字は「タブ」にして次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/fb0f6f7b-fc0c-a167-d81c-b1c3e38e9780.png)
⇒列のデータ形式を「文字列」とし、データのプレビュー内で対象列全て選択した上で完了とする。

これを最初は**「ユーザーさんがこうやってるので、同じデータなってほしいのでUI上でやってください。」**とお願いされましたが、私はそれほど素直ではありません笑
結果として出力されるファイルが一緒ならいいんですよね？という事で下のようなやり方でExcelを立ち上げずに行いました。

## 元データ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/a70cde27-2146-9285-c9da-cce41fc93104.png)
こんな感じのタブ区切りのデータです。


## 手順

#### ExcelのDataTableを初期化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/b621f878-e3c2-5ad4-6275-453f029ce07d.png)
このようにまずは最後に出力するDataTable（以下DT）を宣言しておきます。
「Assign」アクティビティ

#### テキストの読み込み
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/021e7630-4d62-18db-a7b6-18363d7cd7ea.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/c1e73095-c143-312b-bc63-c6d326dd6226.png)
こんな感じでテキストを読み込みます。
Encodingは「SJIS」ですね。
「Read Text File」アクティビティ

#### 読み込んだテキストをまず改行で区切って配列化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/e53996df-2282-da90-4020-915232eabd6e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/7669beb5-d1ae-ded3-dd66-96739ca45106.png)
こんな感じです。
「Assign」アクティビティ

#### 配列をループで回してDTにぶっこむ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/a44627b6-bb8c-5b09-2dbd-032175b60eea.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/6b1c8f23-f5fa-f819-9ff2-99b0057b1f27.png)
※Indexを設定することを忘れずに
「For each」アクティビティ

#### 配列の要素をさらにタブで区切って配列化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/034991ba-ac2c-01b4-cff5-fb74fb627666.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/c122c7fa-4183-4c58-86c1-5679a064a0d7.png)
「Assign」アクティビティ

### 最初だけ先頭行としてヘッダーにする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/7e0f77f0-b759-7052-f6df-52da3fe6fd72.png)
「if」アクティビティ

#### タブ区切りした配列の数だけDTに列を作っていく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/82b337b4-8d13-e42d-fbab-70e2381c1f59.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/9295b96a-a1bb-1286-c549-d1f21952bea3.png)

「For each」アクティビティ
「Add Data Column」アクティビティ

#### 先頭行じゃない場合、配列をDataRowとしてDTにぶっこむ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/9c6699ad-9055-c647-9aac-b2697885a524.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/0f6df9a8-095f-ad35-77ed-0c0c40f78187.png)
「Add Data Row」アクティビティ

#### DTをExcelに書き込む

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/46f2ba9c-ad81-aed7-caaa-98a2fcaa6be5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/66b88718-bb2a-dbda-8cff-4467678076d9.png)

「Excel Application Scope」アクティビティ
「Write Range」アクティビティ
「Save work book」アクティビティ

ここで注意点ですが、Excelを立ち上げずに書き込んでいく場合は、Optionは全てチェックを外してください。
特にAutoSaveは一行ごとに書き込んではSaveを行っているので、データ量が増えてくるとスピードがすごく遅くなります。
これはこの場合に限らず、Excel全ての処理においての共通事項ですね。
その場合は必ずSaveWorkBokkを忘れずに入れてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/fbf12451-22f2-4086-02d0-36c77d85bc96.png)
またWriteRangeアクティビティはAddHeaderにチェック入れる事を忘れずに。



## 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414558/b74f2ce8-e36f-a260-26bb-813dfa73f987.png)

出来ました。
このぐらいのデータ量であれば実行時間は4秒です。
UIを立ち上げて行う事も出来ますが、スピードが段違いですし、エラーも起きやすいのでこちらの方がおすすめします。

#### 最後に
次はDTをタブ区切りテキストにする方法を投稿したいと思います。

何かご意見や、こうした方がよかったなどあればぜひぜひコメントお願いします！！！