LoginSignup
0
1

More than 1 year has passed since last update.

Power Automate: カレンダーのように列名が変化するExcelテーブルからの取得

Last updated at Posted at 2021-09-01

目的

単なる転記 は出来るようになった後に躓く事になる?動的な列名の対処方法の例です。

実施イメージ

今日を含めた三日間のデータを取得して、Teamsに投げる
image.png

概要

  1. テーブルを取得し、動的な列名を配列に格納する
    image.png
  2. 取得する動的な列名配列を生成
    image.png
  3. 列名でデータを取得したら、整形して、Teamsに送付
    image.png

テーブルを取得し、動的な列名を配列に格納する

ポイントは以下
- 一旦 CSV table を構築して、その結果を分解する

解析対象の比較 JSON vs CSV table
image.png
実際のCSVの解析は以下

ColumnNames
skip(split(first(split(outputs('Create_CSV_table')?['body'], '
')),','),2)
expression 説明
split(outputs('Create_CSV_table')?['body'], '
')
改行で分割。行単位へ
first(↑) 最初の行へ
split(↑, ',') カンマで分割。列単位へ
skip(↑, 2) 最初の二つを飛ばす。列名のみへ

取得する動的な列名配列を生成

単に、今日の日付から、表示数分Loopさせて、LoopIndexを使って、列名を増やしてるだけ

列名の書式をここで定義してる。Excelでの定義次第
formatDateTime(body('Add_to_time'), 'M/d')

列名でデータを取得したら、整形して、Teamsに送付

ポイントは
- Select を使ってデータ整形(今回は二つにしているけど、合わせて処理してもOK)

データ取得

image.png

配列を使って、値を取得。
item()?[variables('ColumnNamesToGet')[0]]

警告 item()の後の"?" があることで、データがない場合に Null 扱いとなるのに注意

まずは事前にAdaptive Card のItems用にデータ整形

Adaptive Card Designer を使って、Container内の表示内容を先に作っておいて、text の部分だけを置き換えていく感じ
image.png

jo
[
  {
    "type": "Column",
    "items": [
      {
        "type": "TextBlock",
        "text": "@{item()[variables('ColumnNamesToGet')[0]]}",
        "spacing": "None"
      }
    ]
  },
  {
    "type": "Column",
    "items": [
      {
        "type": "TextBlock",
        "text": "@{item()[variables('ColumnNamesToGet')[1]]}",
        "spacing": "None"
      }
    ]
  },
  {
    "type": "Column",
    "items": [
      {
        "type": "TextBlock",
        "text": "@{item()[variables('ColumnNamesToGet')[2]]}",
        "spacing": "None"
      }
    ]
  },
  {
    "type": "Column",
    "items": [
      {
        "type": "TextBlock",
        "text": "@{item()[variables('ColumnNamesToGet')[3]]}",
        "spacing": "None"
      }
    ]
  }
]

あとは、TeamsへのPostを作っておしまい

  • Compose は、Body() 参照使うとがりがり書くのが面倒なので。Selectを放り込むと参照できるようになる。 image.png
AdaptiveCard
  {
    "type": "AdaptiveCard",
    "body": [
        {
            "type": "Container",
            "space": "none",
            "items": [
                {
                    "type": "TextBlock",
                    "text": "カレンダーテーブル",
                    "wrap": true,
                    "color": "Attention",
                    "fontType": "Default",
                    "weight": "Bolder",
                    "horizontalAlignment": "Center"
                }
            ],
            "style": "good",
            "bleed": true
        },
{
  "type": "ColumnSet",
  "columns": [
    {
      "type": "Column",
      "items": [
        {
          "type": "TextBlock",
          "text": "@{variables('ColumnNamesToGet')[0]}",
          "spacing": "None"
        }
      ]
    },
    {
      "type": "Column",
      "items": [
        {
          "type": "TextBlock",
          "text": "@{variables('ColumnNamesToGet')[1]}",
          "spacing": "None"
        }
      ]
    },
    {
      "type": "Column",
      "items": [
        {
          "type": "TextBlock",
          "text": "@{variables('ColumnNamesToGet')[2]}",
          "spacing": "None"
        }
      ]
    },
    {
      "type": "Column",
      "items": [
        {
          "type": "TextBlock",
          "text": "@{variables('ColumnNamesToGet')[3]}",
          "spacing": "None"
        }
      ]
    }
  ],
  "spacing": "None"
},
        {
            "type": "Container",
            "items":      @{outputs('Compose')}      
        }
    ],
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "msteams": {
        "width": "Full"
    },
    "version": "1.2"
}

補足

Adaptive Cardのエラーが出たときの対処

  • 生成内容を Designer の Card Payload Editor にコピペしておかしいとこを修正するのが早道
    image.png

あとがき

Teams に出力するのではなく、他のExcelへ転記したりとかもできる・・
が、動的取得の場合、出力先も動的変化させると差分検知して出力先の差分反映なども必要になり面倒なので使い道はTeams通知ぐらいかも?

keyword

How to retreive data from dynamic column names

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1