Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

やりたいこと

タブ区切りテキストをExcelファイルに変換したい。
元々のユーザー手順としては、こんな感じでした。
Excelを立ち上げる
⇒ファイル
⇒開く
⇒テキストファイルを選択
⇒下のウインドウが出る
image.png
⇒元のデータの形式を「カンマやタブなどの・・・」を選択して次へ
image.png
⇒区切り文字は「タブ」にして次へ
image.png
⇒列のデータ形式を「文字列」とし、データのプレビュー内で対象列全て選択した上で完了とする。

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

元データ

image.png
こんな感じのタブ区切りのデータです。

手順

ExcelのDataTableを初期化

image.png
このようにまずは最後に出力するDataTable(以下DT)を宣言しておきます。
「Assign」アクティビティ

テキストの読み込み

image.png
image.png
こんな感じでテキストを読み込みます。
Encodingは「SJIS」ですね。
「Read Text File」アクティビティ

読み込んだテキストをまず改行で区切って配列化

image.png

image.png
こんな感じです。
「Assign」アクティビティ

配列をループで回してDTにぶっこむ

image.png

image.png
※Indexを設定することを忘れずに
「For each」アクティビティ

配列の要素をさらにタブで区切って配列化

image.png
image.png
「Assign」アクティビティ

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

image.png
「if」アクティビティ

タブ区切りした配列の数だけDTに列を作っていく

image.png

image.png

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

先頭行じゃない場合、配列をDataRowとしてDTにぶっこむ

image.png

image.png
「Add Data Row」アクティビティ

DTをExcelに書き込む

image.png

image.png

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

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

image.png
またWriteRangeアクティビティはAddHeaderにチェック入れる事を忘れずに。

結果

image.png

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

最後に

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

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

sho14kim
現在外資系SESにてWeb系案件に参画して1年弱。 Node.js,Python,Typescript,Rubyを使用中。 環境はGCPを自由に触らせてもらっているので、コンテナ運用とCICDをゴリゴリに検証しまくってます。 以前はRPA開発を1年とヘルプデスクを2年してました。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away