目的
単なる転記 は出来るようになった後に躓く事になる?動的な列名の対処方法の例です。
実施イメージ
概要
テーブルを取得し、動的な列名を配列に格納する
ポイントは以下
- 一旦 CSV table を構築して、その結果を分解する
解析対象の比較 JSON vs CSV table
実際の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)
データ取得
配列を使って、値を取得。
item()?[variables('ColumnNamesToGet')[0]]
警告
item()の後の"?" があることで、データがない場合に Null 扱いとなるのに注意
まずは事前にAdaptive Card のItems用にデータ整形
Adaptive Card Designer を使って、Container内の表示内容を先に作っておいて、text の部分だけを置き換えていく感じ
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を作っておしまい
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のエラーが出たときの対処
あとがき
Teams に出力するのではなく、他のExcelへ転記したりとかもできる・・
が、動的取得の場合、出力先も動的変化させると差分検知して出力先の差分反映なども必要になり面倒なので使い道はTeams通知ぐらいかも?
keyword
How to retreive data from dynamic column names