意外と使いづらいデータテーブル

フローの処理のなかで一時的にテキストや数値を格納しておくために自分で変数を定義することが通常だ。多くの場合、単一の値を格納する変数か、または複数行を格納できるリスト変数を定義することと思う。もうひとつ、さらにリスト変数よりも次元がひとつ増えた行と列をもつ2次元のテーブルを変数として扱うこともできる。エクセルやCSVのデータを取得したり、ウェブサイト上のテーブルを取得する際などに登場する。

例えばtenki.jpにある降水確率などがはいったデータテーブルを取得してみる。

f:id:yujihb:20211208013719j:plain

アクション「Webページからデータを抽出する」を作成する。これには前提としてブラウザーインスタンスが必要なのでフォアグラウンドウインドウを取得しておく。

f:id:yujihb:20211208013955j:plain

アクション「Webページからデータを抽出する」ではブラウザーインスタンスや出力する変数などを指定する。

f:id:yujihb:20211208014425j:plain

上記フローを実行すると、右ペインのフロー変数のなかのDataFromWebPage変数に行と列の数が表示された。

f:id:yujihb:20211208014544j:plain

DataFromWebPage変数のなかみはこのように2次元のテーブルとなっている。変数のタイプはDatatableだ。

f:id:yujihb:20211208014721j:plain

なおテーブル上の特定の位置の値を指定するには以下のように表記する。1つめの角括弧の中がテーブルの行番号、2つめの角括弧の中がテーブルの列番号だ。

%DataFromWebPage[1][1]%

f:id:yujihb:20211208015614j:plain

上記を実行するとDataFromWebPage変数の中の1行1列目の値が取得できる。

f:id:yujihb:20211208015912j:plain

ウェブサイトの情報がほぼそのままキレイにデータテーブルに格納されるのですごく便利そうにみえる。いろいろと使いやすそうにみえる。しかし一方でデータ取得はできるものの、意外とこれがPower Automate for Desktop上では扱いづらい。2次元のテーブル上の値を操作するアクションがあまりないことが理由だ。

取得したテーブルの列を切り出してリスト変数にすることは、それ専用のアクションがあり簡単にできる。しかし逆にアクションを駆使して新たにテーブルを生成することは難しい。リスト変数を一つの列と考えて複数のリスト変数を横に並べてくっつけてテーブルにする、といったことができそうでいて簡単にできない。

他には2次元データをソートをしたいときにも問題に直面する。エクセルではワンクリックでテーブルの一つの項目をもとにテーブル全部をソートできるが、Power Automate for Desktopではすんなりできず工夫が必要となる。工夫すると可能ではあるが、単にテーブルをソートをしたいだけなので車輪の再発明をしている気分になってくる。実はもっと簡単にできるんじゃないかという疑念と戦いながら工夫をこらしていくのはとっても精神に悪い。Power Automate for Desktopはソートは不得意なのでできればエクセルにデータを渡してエクセルで処理するとよい。