抽出したXMLデータをExcelにまとめる
[3]Excelを起動する
[Excel]アクショングループの[Excelの起動]アクションを配置すると、設定ダイアログが開きます。特に設定すべき点はないので、そのまま保存します。
[4]書籍情報の抽出したい項目名のリストを作成する
XMLのitem要素の中身の抽出したい要素名のタグ名をリストにします。
[変数]アクショングループの[変数の設定]アクションを配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- 変数:%elementNames%
- 値:%['title', 'author', 'pubDate', 'date', 'publisher', 'price', 'link']%
[5]Excelシートに書籍情報の項目をヘッダーとして書き込む
項目名を結果の表の列名としてExcelシートの1行目に書き込みます。
[Excel]アクショングループの[Excelワークシートに書き込み]アクションを配置すると、設定ダイアログが開きます。
図:Excelワークシートに(要素名)書き込むアクションの設定
以下の設定を選択/入力し、保存します。
- 書き込む値:%{elementNames}%
- 列:1
- 行:1
[6]For eachでループする(検索結果を1件ずつ抽出する)
[ループ]アクショングループの[For each]アクションを配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。XPathResultsはXMLから取得したitem要素の集合です。
- 反復処理を行う値:%XPathResults%
[7]検索結果の1件をXMLとした変数を設定する
抽出した1件分のitem要素とその中身を独立したXMLドキュメントとして扱えるようにするために、XML宣言を先頭に付与します。
[変数]アクショングループの[変数の設定]アクションをFor each-Endの中に配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- 変数:%itemXML%
- 値:<?xml version="1.0" encoding="UTF-8"?>%CurrentItem%
[8]Excelシートの最初の空行の位置を取得する
[Excel]アクショングループの[Excelワークシートから最初の空の列や行を取得]アクションをFor each-Endの中に配置すると、設定ダイアログが開きます。特別な設定は不要なので、そのまま保存します。
[9]書籍情報1件の項目のループをする
抽出したい項目名のリストelementNamesをループします。
[ループ]アクショングループの[Loop]アクションをFor each-Endの中に配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- 開始値:0
- 終了:%elementNames.Count - 1%
- 増分:1
[10]項目名の変数を設定する
[変数]アクショングループの[変数の設定]アクションをLoop-Endの中に配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- 変数:%elementName%
- 値:%elementNames[LoopIndex]%
[11]抽出値用の変数を空に初期化する
次のアクションでXML要素が存在しない場合、値が上書きされず、もともと入っていた値がシートに書き込まれてしまいます。これを防止するために、あらかじめ空文字を設定しておきましょう。
[変数]アクショングループの[変数の設定]アクションをLoop-Endの中に配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- 変数:%XmlElementValue%
- 値:%''%
[12]XML要素の値を取得する(エラー時は次の処理に進む)
[XML]アクショングループの[XML要素の値を取得します]アクションをLoop-Endの中に配置すると、設定ダイアログが開きます。
以下の設定を選択/入力します。
- XMLドキュメント:%itemXML%
- XPathクエリ:/item/*[local-name()='%elementName%']
- 生成された変数:%XmlElementValue%(XmlElementValue変数が既にあるので、配置時%XmlElementValue2%となってしまいます、2を削除します)
XMLのタグには「名前空間:名前」という形式で表されているものがあります。ここでは名前だけで検索したいので、local-name()でタグの名前のみを取得しています。「*」はすべての要素、[]は条件を指定します。
また、[XML要素の値を取得します]アクションの設定ダイアログ左下の[エラー発生時]ボタンをクリックし、[すべてのエラー]で[フロー実行を続行する]をクリックして選択状態にしておきます。これでエラー時にもそのままフローを継続できます。
[13]Excelシートに取得した値を書き込む
[Excel]アクショングループの[Excelワークシートに書き込む]アクションをLoop-Endの中に配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- 書き込む値:%XmlElementValue%
- 列:%LoopIndex + 1%
- 行:%FirstFreeRow%
[14]Excelを保存する
[Excel]アクショングループの[Excelの保存]アクションをフローの末尾に配置すると、設定ダイアログが開きます。
以下の設定を選択/入力し、保存します。
- 保存モード:名前を付けてドキュメントを保存
- ドキュメント形式:Excelブック(.xlsx)
- ドキュメントパス:%NewFolder%\%Replaced%.xlsx
[15]Excelを閉じる
[Excel]アクショングループの[Excelを閉じる]アクションを配置すると、設定ダイアログが開きます。特別な設定は不要なので、そのまま保存します。
[16]フローを実行する
フローを保存して実行します。入力ダイアログではそのままで実行します(検索キーワード:Power Automate Desktop)。作成されたExcelブックを開くと、XMLから抽出したデータがシートに表として書き込まれているのが確認できます。
今回のフローは検索タイトルをユーザーに入力させるようになっていますが、これをファイルから読み込むようにすることで、より自動化らしいフローに改良することもできます。また、Excelシートの一つ一つに個々の値を書き出していますが、データテーブル変数に追加するなどして、Excelシートに書き出す/テキストファイル(csv,tsv)に保存する/DBに保存するなどの改良も考えられます。
まとめ
Power Automate for Desktopのフローから、XMLアクションでXMLの内容を解析して、欲しい情報を取得する方法を説明しました。Webサービスの結果などXMLがあった場合、XMLアクションを使用して一部を抽出したり、後続のフローで使用しやすい他のデータ形式(他のシステムやツールで読み込む、画面に表示する、など目的に応じた最適な形式)に変換することもできます。
