この記事は、職場の開発担当者向けの内容です。
荒い内容のため、あらかじめご了承いただいた上でお読みください。
1.はじめに
ある開発担当者から「システムからダウンロードしたXMLファイル(.xml)を、UiPath Studioを用いてExcelやCSVに変換したい。」という問い合わせがあり、即答できなかったため、自分なりに方法を探してみました。
手法としては、2通り見つけました。
【手法1】Excelで開く方法
【手法2】UiPathでデータ変換
サンプルXMLデータとして、気象庁ホームページから取得したものを使用します。
(今回は、高頻度フィードの「随時」を取得。)
【事前準備】
上記の高頻度フィードの「随時」をクリックし、表示されたXMLをコピーし、
メモ帳へ貼り付け、「気象庁.txt」として保存します。
その後、拡張子を「.txt」から「.xml」に変更します。
この「気象庁.xml」データを今回は使用します。
2.【手法1】Excelで開く方法
・「XMLテーブルとして開く」を選択し、「OK」をクリックします。
・データテーブルの形式で展開することができました。
この動作をUiPath Studioで実装すれば簡単にデータテーブル化できそうですね。
・Excelで「名前の管理」を見てみると、「テーブル1」という名前でテーブルが作成されています。
【参考】
UiPath Studioでこの「テーブル1」を使用する場合は、以下のサイトで解説されている方法で対応できます。
誰でもできる業務改善講座 UiPath Excel テーブル範囲を取得 アクティビティ
3.【手法2】UiPathでデータ変換
様々なサイトで情報収集し、以下の方法を見出しました。
おそらくもっとスマートな手法もあるのだろうと思いますが、今はこのレベルが限界です。
(メソッドの意味や、変数の種類等の質問には答えられません。。。)
・「10_InputData」フォルダに、あらかじめ「気象庁.xml」を配置。
3.1.XMLファイルを読込み→CSV出力.xaml
【アクティビティ拡大】
「メソッドを呼び出し」のプロパティのパラメーターを設定。
このワークフローを実行すると、、、
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
6つのCSVが出力されました。
(XMLから6つのデータテーブルを抽出し、それぞれCSVに出力しました。)
内容を確認して、今回、必要と思われるデータを以下の4つと見定めました。
・feed.csv
・entry.csv
・author.csv
・content.csv
3.2.CSVを読込み→データテーブルを結合.xaml
【アクティビティ拡大】
まず、それぞれのCSVをDataTableに変換します。
・feed.csv → dt_Feed
・entry.csv → dt_Entry
・author.csv → dt_Author
・content.csv → dt_Content
データテーブルを順に結合します。
feed.csvとentry.csvで一致する列を探すと、「feed_id」が一致することが分かりました。
ですので、「データテーブルを結合」アクティビティで、以下のとおり設定し、「dt_FeedandEntry」に結合後のデータテーブルを出力します。
データテーブル間で一致する列を見つけていき、順に結合していきます。
4つのCSVから作成したデータテーブルを結合し、1つのデータテーブル(dt_full)に出力できましたので、最後にCSVに出力することとします。
このワークフローを実行すると、、、
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
CSVが出力されました。
ちなみに、「データテーブルを結合」アクティビティで、それぞれのデータテーブルに同名の列があった場合は、「(列名)_1」「(列名)_2」といった形で列名に連番がつくようです。
4.さいごに
いかがでしたでしょうか。今回は2通りの手法を紹介させていただきました。
動作が安定するのであれば前者の手法(【手法1】Excelで開く方法)をワークフロー化する方が、圧倒的に開発工数は少なそうです。
今回の解説を作成するにあたり、初めてXMLの中身をまじまじと覗くことになり、いろいろと勉強になりました。
みなさんの参考になれば幸いです。