SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Power Automate Desktopチュートリアル

Windows10の無償デスクトップ自動化ツール「Power Automate Desktop」で取得したXMLから任意のデータを抽出する

Power Automate Desktopチュートリアル 第13回

抽出したXMLデータをExcelにまとめる

[3]Excelを起動する

 [Excel]アクショングループの[Excelの起動]アクションを配置すると、設定ダイアログが開きます。特に設定すべき点はないので、そのまま保存します。

図:Excelの起動アクションの配置
図:Excelの起動アクションの配置

[4]書籍情報の抽出したい項目名のリストを作成する

 XMLのitem要素の中身の抽出したい要素名のタグ名をリストにします。

 [変数]アクショングループの[変数の設定]アクションを配置すると、設定ダイアログが開きます。

図:変数の設定(要素名リスト)アクションの配置
図:変数の設定(要素名リスト)アクションの配置
図:変数の設定(要素名リスト)アクションの設定
図:変数の設定(要素名リスト)アクションの設定

 以下の設定を選択/入力し、保存します。

  • 変数:%elementNames%
  • 値:%['title', 'author', 'pubDate', 'date', 'publisher', 'price', 'link']%

[5]Excelシートに書籍情報の項目をヘッダーとして書き込む

 項目名を結果の表の列名としてExcelシートの1行目に書き込みます。

 [Excel]アクショングループの[Excelワークシートに書き込み]アクションを配置すると、設定ダイアログが開きます。

図:Excelワークシートに(要素名)書き込みアクションの配置
図:Excelワークシートに(要素名)書き込みアクションの配置
図:Excelワークシートに(要素名)書き込みアクションの設定

図:Excelワークシートに(要素名)書き込むアクションの設定

 以下の設定を選択/入力し、保存します。

  • 書き込む値:%{elementNames}%
  • 列:1
  • 行:1

[6]For eachでループする(検索結果を1件ずつ抽出する)

 [ループ]アクショングループの[For each]アクションを配置すると、設定ダイアログが開きます。

図:For eachアクションの配置
図:For eachアクションの配置
図:For eachアクションの設定
図:For eachアクションの設定

 以下の設定を選択/入力し、保存します。XPathResultsはXMLから取得したitem要素の集合です。

  • 反復処理を行う値:%XPathResults%

[7]検索結果の1件をXMLとした変数を設定する

 抽出した1件分のitem要素とその中身を独立したXMLドキュメントとして扱えるようにするために、XML宣言を先頭に付与します。

 [変数]アクショングループの[変数の設定]アクションをFor each-Endの中に配置すると、設定ダイアログが開きます。

図:変数の設定(1件分)アクションの配置
図:変数の設定(1件分)アクションの配置
図:変数の設定(1件分)アクションの設定
図:変数の設定(1件分)アクションの設定

 以下の設定を選択/入力し、保存します。

  • 変数:%itemXML%
  • 値:<?xml version="1.0" encoding="UTF-8"?>%CurrentItem%

[8]Excelシートの最初の空行の位置を取得する

 [Excel]アクショングループの[Excelワークシートから最初の空の列や行を取得]アクションをFor each-Endの中に配置すると、設定ダイアログが開きます。特別な設定は不要なので、そのまま保存します。

図:Excelワークシートから最初の空の列や行を取得アクションの配置
図:Excelワークシートから最初の空の列や行を取得アクションの配置

[9]書籍情報1件の項目のループをする

 抽出したい項目名のリストelementNamesをループします。

 [ループ]アクショングループの[Loop]アクションをFor each-Endの中に配置すると、設定ダイアログが開きます。

図:Loopアクションの配置
図:Loopアクションの配置
図:Loopアクションの設定
図:Loopアクションの設定

 以下の設定を選択/入力し、保存します。

  • 開始値:0
  • 終了:%elementNames.Count - 1%
  • 増分:1

[10]項目名の変数を設定する

 [変数]アクショングループの[変数の設定]アクションをLoop-Endの中に配置すると、設定ダイアログが開きます。

図:変数の設定(要素名)アクションの配置
図:変数の設定(要素名)アクションの配置
図:変数の設定(要素名)アクションの設定
図:変数の設定(要素名)アクションの設定

 以下の設定を選択/入力し、保存します。

  • 変数:%elementName%
  • 値:%elementNames[LoopIndex]%

[11]抽出値用の変数を空に初期化する

 次のアクションでXML要素が存在しない場合、値が上書きされず、もともと入っていた値がシートに書き込まれてしまいます。これを防止するために、あらかじめ空文字を設定しておきましょう。

 [変数]アクショングループの[変数の設定]アクションをLoop-Endの中に配置すると、設定ダイアログが開きます。

図:変数の設定(値の初期化)アクションの配置
図:変数の設定(値の初期化)アクションの配置
図:変数の設定(値の初期化)アクションの設定
図:変数の設定(値の初期化)アクションの設定

 以下の設定を選択/入力し、保存します。

  • 変数:%XmlElementValue%
  • 値:%''%

[12]XML要素の値を取得する(エラー時は次の処理に進む)

 [XML]アクショングループの[XML要素の値を取得します]アクションをLoop-Endの中に配置すると、設定ダイアログが開きます。

図:XML要素の値を取得しますアクションの配置
図:XML要素の値を取得しますアクションの配置
図:XML要素の値を取得しますアクションの設定
図:XML要素の値を取得しますアクションの設定

 以下の設定を選択/入力します。

  • XMLドキュメント:%itemXML%
  • XPathクエリ:/item/*[local-name()='%elementName%']
  • 生成された変数:%XmlElementValue%(XmlElementValue変数が既にあるので、配置時%XmlElementValue2%となってしまいます、2を削除します)

 XMLのタグには「名前空間:名前」という形式で表されているものがあります。ここでは名前だけで検索したいので、local-name()でタグの名前のみを取得しています。「*」はすべての要素、[]は条件を指定します。

 また、[XML要素の値を取得します]アクションの設定ダイアログ左下の[エラー発生時]ボタンをクリックし、[すべてのエラー]で[フロー実行を続行する]をクリックして選択状態にしておきます。これでエラー時にもそのままフローを継続できます。

図:XML要素の値を取得しますアクションのエラー発生時の設定
図:XML要素の値を取得しますアクションのエラー発生時の設定

[13]Excelシートに取得した値を書き込む

 [Excel]アクショングループの[Excelワークシートに書き込む]アクションをLoop-Endの中に配置すると、設定ダイアログが開きます。

図:Excelワークシートに(要素の値)書き込みアクションの配置
図:Excelワークシートに(要素の値)書き込むアクションの配置
図:Excelワークシートに(要素の値)書き込みアクションの設定
図:Excelワークシートに(要素の値)書き込むアクションの設定

 以下の設定を選択/入力し、保存します。

  • 書き込む値:%XmlElementValue%
  • 列:%LoopIndex + 1%
  • 行:%FirstFreeRow%

[14]Excelを保存する

 [Excel]アクショングループの[Excelの保存]アクションをフローの末尾に配置すると、設定ダイアログが開きます。

図:Excelの保存アクションの配置
図:Excelの保存アクションの配置
図:Excelの保存アクションの設定
図:Excelの保存アクションの設定

 以下の設定を選択/入力し、保存します。

  • 保存モード:名前を付けてドキュメントを保存
  • ドキュメント形式:Excelブック(.xlsx)
  • ドキュメントパス:%NewFolder%\%Replaced%.xlsx

[15]Excelを閉じる

 [Excel]アクショングループの[Excelを閉じる]アクションを配置すると、設定ダイアログが開きます。特別な設定は不要なので、そのまま保存します。

図:Excelを閉じるアクションの配置
図:Excelを閉じるアクションの配置

[16]フローを実行する

 フローを保存して実行します。入力ダイアログではそのままで実行します(検索キーワード:Power Automate Desktop)。作成されたExcelブックを開くと、XMLから抽出したデータがシートに表として書き込まれているのが確認できます。

図:XMLからデータを抽出するフローの実行結果
図:XMLからデータを抽出するフローの実行結果

 今回のフローは検索タイトルをユーザーに入力させるようになっていますが、これをファイルから読み込むようにすることで、より自動化らしいフローに改良することもできます。また、Excelシートの一つ一つに個々の値を書き出していますが、データテーブル変数に追加するなどして、Excelシートに書き出す/テキストファイル(csv,tsv)に保存する/DBに保存するなどの改良も考えられます。

まとめ

 Power Automate for Desktopのフローから、XMLアクションでXMLの内容を解析して、欲しい情報を取得する方法を説明しました。Webサービスの結果などXMLがあった場合、XMLアクションを使用して一部を抽出したり、後続のフローで使用しやすい他のデータ形式(他のシステムやツールで読み込む、画面に表示する、など目的に応じた最適な形式)に変換することもできます。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Power Automate Desktopチュートリアル連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 飯島 聡(WINGSプロジェクト イイジマ サトシ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/16326 2022/09/08 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー