UiPath|CSVを読み込んでExcelに変換する方法

スポンサーリンク

UiPathを使ってCSVを読み込んでExcelに変換する方法を解説します。またこの方法を利用してExcel帳票を作成する本格的なワークフローも解説しているのでお読みください。

動作条件
■動作条件
Excelがインストールされている必要があります。

■以下の環境で検証しています。
OS:Windows10
UiPath Studio:バージョン2021.10.5 Community License
(クラシックデザインエクスペリエンス)

それでは、どうぞ!

プレミアム会員

この記事を書いた人
この記事を書いた人
こさい
こさい

(株)完全自動化研究所代表のこさいです。

1) エンジニア歴25年超。RPA開発および支援8年超
2) RPA関連の書籍を5冊出版。現在はGPT×PADの書籍を執筆中!
3)当サイトのプレミアム会員募集中!無限回答、動画見放題。詳しくはこちら

CSVを読み込んでExcelに変換する方法【UiPath】

使用するアクティビティは2つです。

  • [CSVを読み込み]アクティビティ
  • [範囲に書き込み]アクティビティ

それぞれ解説します。

[CSVを読み込み]アクティビティを追加する

[CSVを読み込み]アクティビティを使用してCSVを読み込みます(図1)。このアクティビティはアクティビティパネルの[利用可能]→[アプリの連携]→[CSV]の中にあります。

[ファイルパス(アクティビティ上の[読み込み元ファイル])]にCSVファイルのパスを入力し、[データテーブル(アクティビティ上の[出力先])]にデータテーブル型変数を設定します。

[先頭行をヘッダーとする]にチェックを付けることで、CSVファイルの1行目をヘッダーとみなしてデータテーブルを作成します。

図1:[CSVを読み込み]アクティビティ

[範囲に書き込み]アクティビティを追加する

[範囲に書き込み]アクティビティを使用してExcelファイルに読み込みます(図2)。このアクティビティはアクティビティパネルの[利用可能]→[システム]→[ファイル]→[ワークブック]の中にあります。

[利用可能]→[アプリの連携]→[Excel]の中にも同じ名前のアクティビティがあるので混同しないようにしてください。[Excel]の中にある[範囲に書き込み]アクティビティでも動作しますが、[Excelアプリケーションスコープ]を別途必要とします。

[ブックパス]にExcelファイルのパスを入力します。このパスにExcelファイルが無い場合は自動的に生成されます。

[データテーブル]にデータテーブル型変数を設定します。[CSVを読み込み]アクティビティの中で出力先として指定したデータテーブルです。

[ヘッダーの追加]にチェックを入れるとデータテーブルのヘッダーがExcelファイルの1行目に出力されます。

図2:[範囲に書き込み]アクティビティ

実行する

作成したプロジェクトフォルダーの中に、サンプルファイル「CusSales Data.csv」をコピーしてから実行してください。「CusSales Data.csv」は以下のボタンを押すとダウンロードできます(ダウンロードには無料ユーザー登録が必要です)。

“CusSales Data.csv” をダウンロード

CusSalesData.csv – 525 回のダウンロード – 35.67 KB

実行したら、プロジェクトフォルダーの中に「顧客売上.xlsx」というExcelファイルが作成されたと思います。

ここからは応用になりますので、時間のある人はぜひお読みください。

CSVファイルを読み込んでExcel帳票を作成するワークフロー

CSVを読み込んでExcelに変換する方法は理解できましたね。

ここからは

VLOOKUP関数を使ってExcelを加工している。 毎日実行している。

といった業務を自動化したい人に向けて、本格的なワークフローを作る方法について解説します。

このセクションでは

  • CSVファイルとExcelドキュメントを突合する方法
  • 突合したデータを新しいExcelドキュメントに保存する方法
  • 1本の本格的なワークフローの作り方

が理解できます。

業務イメージ

最初に今から作成するワークフローの業務イメージを説明します。具体的な業務イメージを持つことで、より深く自動化業務を理解することができます。

商品を卸しているBtoBの企業の業務をイメージします(図1)。

顧客企業が商品受注システムを使って発注します。この企業では、毎朝、商品受注システムからデータをCSV形式でダウンロード、顧客ごとの営業担当者が記載された担当者マスタ(Excelファイル)と結合させて、受注明細データ(Excelファイル)を作成しています

図1:BtoB企業の業務イメージ

図1を具体的なExcelファイルのイメージで表したのが、図2です。

図2:受注明細データ[SalesDetailData.xlsx]を作成するイメージ

ワークフローの完成図

ワークフローの完成図を載せます(図3)。

ワークフローは4つのパートで構成されます。 [受注CSV読み込み]で受注CSVファイルを読み込み、 [担当者マスタ読み込み]で担当者マスタを読み込みます。[テーブルの結合]で2つのファイルを結合させて、 [Excelに書き込み]で受注明細をExcelファイルに書き込みます

図3:完成図

作成準備

ワークフローを作成する前の準備を行ってください。

STEP1

UiPath Studioを起動し、新たにプロジェクトを作成する。

STEP2

作成したプロジェクトフォルダーの中に、サンプルファイル「CusSales Data.csv」と「staffmaster.xlsx」をコピーする(ダウンロードには無料ユーザー登録が必要です)。

“CusSales Data.csv” をダウンロード

CusSalesData.csv – 525 回のダウンロード – 35.67 KB

“staffmaster.xlsx” をダウンロード

staffmaster.xlsx – 474 回のダウンロード – 13.02 KB

これで準備は完了です。

作成手順

では、全体の枠を作るところからワークフロー作成を始めていきましょう。

全体の枠を作る

STEP1

Main.xamlを開く。

[フローチャート(Flowchart)]アクティビティを追加する。

表示名を「Main」に変更する。

クラシック デザイン エクスペリエンスで解説しています

この記事はクラシック デザイン エクスペリエンスで解説しています。この記事を参考にしてワークフローを作成する場合は、以下の記事を読んでUiPath Studioをクラシック デザイン エクスペリエンスに変更してください。

STEP2

[Main]フローチャートをダブルクリックして展開し、[Main]フローチャート上に以下の4つのアクティビティを追加し、順番に流れ線で結ぶ(図4)。

[CSVを読み込み(Read CSV)]アクティビティを追加し、 表示名を「 受注CSV読み込み」にする。

[Excel アプリケーションスコープ(Excel Application Scope)]アクティビティを追加し、表示名を「担当者マスタ読み込み」にする。

[シーケンス(Sequence)]アクティビティを追加し、表示名を「 テーブルの結合」にする。

[Excel アプリケーションスコープ(Excel Application Scope)]アクティビティを追加し、表示名を「Excelに書き込み」にする。

ワークフローの動作には関係ありませんが、メンテナンス性を高めるために各アクティビティには注釈を入れましょう。

図4:全体の枠を作る

受注CSV読み込み

[受注CSV読み込み]をダブルクリックし、 アクティビティを展開してください。

STEP1

[ファイルのパス]入力ボックスの右側にあるボタンをクリックして、ファイル 選択ダイアログを表示し、 「CusSalesData.csv」を選択する(プロパティ[ファイルのパス]に直接入力してもよい。この場合「”(ダブルクォーテーション)」でパスを囲むことを忘れずに)。

STEP2

プロパティ[ データテーブル]の入力ボックスにカーソルをあてた状態で[Ctrl]+[K]キーを押し、[変数を設定]に「CusSalesData」と入力し、 [Enter]キーを押す。DataTable型変数[CusSalesData]が設定される。

図5:[受注CSV読み込み]の設定

担当者マスタ読み込み

[Main]フローチャートに戻り、 [担当者マスタ読み込み]をダブルクリックし展開してください。

STEP1

[ブックのパス]入力ボックスの右側にあるボタンをクリックして、 ファイル選択ダイアログを表示し、 「staffmaster.xlsx」を選択する(プロパティ[ブックのパス]に直接入力してもよい)。

STEP2

[実行]の表示名を「担当者マスタデータ加工」に変更する。

STEP3

[担当者マスタデータ加工]に以下の3つのアクティビティを配置する。
[範囲を読み込み(Read Range)]アクティビティを追加し、 表示名を「 担当一覧をDataTableに格納」に変更する。

[データ列を追加(Add Data Column)]アクティビティを追加し、表示名を「MasterCustomerCD追加」に変更する。

[繰り返し( 各行)(For Each Row)]アクティビティを追加し、 表示名を「顧客コード転記ループ」に変更する。

STEP4

[担当者一覧をDataTableに格納]を選択する(図6❶) 。

プロパティ[シート名]に「”担当一覧”」を設定する。

プロパティ[ データテーブル]の入力ボックスにカーソルをあてた状態で[Ctrl]+[K]キーを押し、[変数を設定]に「StaffMasterData」と入力し、 [Enter]キーを押す。

[変数]パネルを開き、DataTable型変数 [StaffMasterData]のスコープを[Main]に変更する。

STEP5

[MasterCustomerCD追加]を選択する(図6❷) 。

プロパティ[データテーブル]にDataTable型変数[StaffMasterData]を設定する。

プロパティ[ 列名]に「”MasterCustomerCD”」と入力する。 これにより、DataTable型変数[StaffMasterData]に1列追加される。

STEP6

[顧客コード転記ループ]を選択する(図6❸) 。

プロパティ[データテーブル]にDataTable型変数 [StaffMasterData]を設定する。

[Body]に[代入(Assign)]アクティビティを追加する。

[代入]のプロパティ[左辺値(To)]に「row.Item(“MasterCustomerCD”)」と入力する。

[代入]のプロパティ[右辺値(Value)]に「row.Item(“顧客CD”).ToString」と入力する。

図6:[担当者マスタ読み込み]の設定

【MEMO】[担当者マスタ読み込み]では何をしている?

受注CSV(CusSalesData.csv)は、CSV形式のファイルです。DataTableに読み込む際、 受注CSV のすべての列のDataColumnクラスのDataTypeプロパティはString型となります。

一方、 担当者マスタ(staffmaster.xlsx)はExcelファイルです。Excelファイルを読み込み、DataTableを生成する際は、 すべての列のDataColumnクラスのDataTypeプロパティがObject型になります。

後ほど、2つのDataTableを突合させたいのですが、 [CustomerCD]と[ 顧客コード] のDataTypeプロパティの型がそれぞれ、String型とObject型であるため型が一致しません

そのため、DataTable型変数[StaffMasterData]の[顧客コード]を取得し、DataTypeプロパティをString型に変換したのち、新しい列[MasterCustomerCD]に挿入しています。

これにより、DataTable型変数[SalesFileData]の[CustomerCD]とDataTable型変数 [StaffMasterData]の[MasterCustomerCD]のDataTypeプロパティが同じString型になるため、結合ルールに使えるようになります(図7

図7:[CusSalesData]と[StaffMasterData]が結合できるようになる

テーブルの結合

メインのフローチャートに戻り、[テーブルの結合]の「ダブルクリックして表示」をダブルクリックし展開してください。 以下の2つのアクティビティを追加してください。

STEP1

[データテーブルを結合]アクティビティ

[データテーブルをフィルタリング(Filter Data Table)]アクティビティ

STEP2

[データテーブルを結合]の[結合ウィザード]をクリックし、[結合ウィザード]画面を起動する(図8)。

[入力データテーブル1]にDataTable型変数[CusSalesData]、[入力データテーブル2]にDataTable型変数[StaffMasterData]を設定する。

[出力データテーブル]の入力ボックスにカーソルをあてた状態で[Ctrl]+[K]キーを押し、[変数を設定]に「SalesDetailData」と入力し、[Enter]キーを押す。

結合型は[Inner]を選択する。

[列テーブル1]には「”CustomerCD”」と入力する。

[操作]は「=(イコール)」を選択する。

[列テーブル2]には「”MasterCustomerCD”」と入力する。

入力が完了したら[OK]をクリックする。

図8:[結合ウィザード]画面の設定

[結合ウィザード]画面が閉じます。変数のスコープを変更してください。

[変数]パネルを開き、 変数[SalesDetailData]のスコープを[Main]に変更する。

HINT 結合型

結合型には次の3つがあります。

1. Inner:結合ルールに一致する[入力データテーブル1]と[入力データテーブル2]のすべての行が保持されます。ルールに一致しない行はすべて、[出力データテーブル]から削除されます。

2. Left:[入力データテーブル1]のすべての行と結合ルールに一致する[入力データテーブル2]の値のみが保持されます。一致しない場合null値が挿入されます。

3. Full:結合条件の一致/不一致にかかわらず、 [入力データテーブル1]と[ 入力データテーブル2]のすべての行が保持されます。 両方のデータテーブルの条件に一致しない行には、null値が挿入されます。

STEP3

[データテーブルをフィルタリング]の[ フィルターウィザード]をクリックし、[フィルターウィザード]画面を起動する。

[入力データテーブル]と[ 出力データテーブル]にはDataTable型変数[SalesDetailData]を設定する。

[出力列]タブをクリックし、図9のように入力する。

入力が完了したら[OK]をクリックする。

図9:[フィルターウィザード]画面の設定

[テーブルの結合]が完成しました(図10)。

図10:[テーブルの結合]が完成

Excelに書き込み

[Main]フローチャートに戻り、 [Excelに書き込み]をダブルクリックし展開してください。

STEP1

プロパティ[ワークブックのパス]に「“SalesDetailData.xlsx”」と入力する。

[実行]の表示名を「Excelに書き込みを実行」に変更する。

STEP2

[Excelに書き込みを実行]に、[範囲に書き込み(Write Range)]アクティビティ([アクティビティ]パネルの [使用可能]→[アプリの連携→[Excel])を追加する。

プロパティ[ データテーブル]にDataTable型変数[SalesDetailData]を設定する。

プロパティ[ヘッダーの追加]にチェックする。

[Excelに書き込み]が完成しました(図11)。

図11:[Excelに書き込み]が完成

お疲れ様でした! これでワークフローの作成が完了しました。

使用する変数

ワークフロー内で使用する変数は表1の通りです。

表1:使用する変数

名前変数の型スコープ既定値
CusSalesDataDataTableMain
StaffMasterDataDataTableMain
SalesDetailDataDataTableMain

実行してみよう

それでは、ワークフローを実行してください。数秒でワークフローは終了します。

ワークフローの実行に成功すると、 プロジェクトフォルダーに「SalesDetailData.xlsx」が生成されます。

「SalesDetailData.xlsx」を開いて内容を確認してください。図2で示したようになっていますか?

運用のポイント

1. マスタファイルは共有フォルダーに格納する 

担当者マスタ「staffmaster.xlsx」は、当プロジェクトフォルダーの直下に配置されていますが、実際の運用時には運用者が加工・修正できるフォルダーに配置しましょう。部署内で共有する場合は部内の共有フォルダーに配置することになるでしょう。

 その場合、「担当者マスタ読み込み」のSTEP1のプロパティ[ブックのパス]を修正してください。

2. 担当者マスタはメンテナンスされている前提 

 「テーブルの結合」で解説しているように、担当者マスタと受注CSVの結合条件は「Inner join」です。

受注CSVの列[CustomerCD]のすべてが、担当者マスタの[顧客CD]になかった場合、その行は出力されません。

もし、担当者マスタのメンテナンス漏れも検知したい場合は、結合条件を「Left Join」にし、合致せずにNull値が挿入されている行を探す、というロジックを入れなければなりません。

 このように、実際の業務に使うロジックは長くなりがちです。現実的な対応方法として、担当者マスタが正しくメンテナンスされていることを確認するためだけのワークフローを作成することをお勧めします。

運用時には、まず確認用ワークフローを実行し、確認ができた後に、本記事のワークフローを実行します。

まとめ

この記事では

「CSVを読み込んでExcelに変換する方法」を解説しました。

これが理解できた人は「CSVファイルを読み込んでExcel帳票を作成するワークフロー」を作ってくれたと思います。

長くて難しく感じる人もいたと思いますが、本格的なワークフローを作る充実感を得ることができたんじゃないでしょうか?

UiPathでさらに自動化を進めたい場合は、他のUiPathの記事をお読みください。
>>UiPath関連の記事一覧