LoginSignup
0
0

More than 1 year has passed since last update.

PowerAutomate: Teams 参加者レポートをCSV化して利用する

Last updated at Posted at 2022-06-13

背景

社内で講義を開催したり参加した場合、研修ポイントってのが貰えます。
で Teams の参加者レポートの出番
image.png

とはいえこのままじゃ使えないので
上手く処理して、他のデータとマージできる状態にしてやれば、便利じゃないかってお話。

まぁ実際は C# でツール作ってはいるんですが、意外にいろんな用途で使いたいことがあったので、取り込みベースとして用意してみた

参加者レポート

見ると分かるけど・・以下ちょっと特殊

  • CSV といいつつ、TSV ( Tab Separated Values )
  • Header が7行ほど先頭に付いてる

image.png

検討

自動で「参加者のレポート」がダウンロード出来たら勝手に変換して通知

ってことまでやりたいと思ったけど。以下理由でダメそう

  • SharePoint にあげられるファイルではなさそう
  • スレッド検知は出来たけど、更新されることは検知出来無さそう
  • スレッド検知された時点で、レポートはない
  • F12 で確認してみたけど・・cortana.api ってなに?
    image.png

Graph API で調べると以下辺りで追っていくと取れそうな感じもする
とはいえ、起動方法が Selected Message トリガーになって面倒そうなのもあって、今回はパス

ということで、今回は簡潔に以下とする

  1. Share/OneDrive にファイルをアップロード
  2. TSV → CSV 変換

この先としては、用途毎に変換処理と、関連データをどっかに持つ必要がある・・かな。

概要

  1. 起動トリガーと、CSV Contents 取得
    1. SharePoint 版
    2. OneDrive 版
  2. TSV → CSV 変換

起動トリガーと、CSV Contents 取得

SharePoint の場合

TriggerBody() の結果そのものが FileContent なので、そのまま解析処理へ
image.png

OneDrive の場合

FileContent を取得する為に、Get File Content アクションを利用して、解析へ
image.png

TSV → CSV 変換

フローはこんな感じ

image.png

簡単に説明すると・・

  • Select Text2CSV

    • 改行コードで Split() して行分割
    • タブコードで Split() して列(Columns) 分割
    • Length はフィルター用
      image.png
  • Filter Array

    • 「会議の概要」などがファイルの先頭7行にあるので、この部分を除外。Skip(7) で飛ばしてもOK
      image.png
  • Compose Headers

    • 次の Select で Mapping する為に Header のみ保存
  • Select Mapping CSV

    • Header と、各行の列データを組み合わせて データ整形
      image.png
  • Create CSV table

    • CSV 構造を元に Table 生成
      image.png

フロー

SharePoint 側の Select Text2CSV 以下のサンプル

OneDrive で使うときは、以下修正

  • Select Text2CSV での TriggerBody() のところを、FileContent アクションへ

変更前

@{split(triggerBody(), decodeUriComponent('%0A'))}

変更後

@{split(body('Get_file_content_CSV'), decodeUriComponent('%0A'))}

フローのクリップボード
{"id":"2347bef4-bc10-4b78-8919-ebb5c21d15a7","brandColor":"#8C3900","connectionReferences":{"shared_sharepointonline":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/shared-sharepointonl-15e7a58d-6555-418d-a955-a6b286a76a7b"}}},"connectorDisplayName":"Control","icon":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KIDxwYXRoIGQ9Im0wIDBoMzJ2MzJoLTMyeiIgZmlsbD0iIzhDMzkwMCIvPg0KIDxwYXRoIGQ9Im04IDEwaDE2djEyaC0xNnptMTUgMTF2LTEwaC0xNHYxMHptLTItOHY2aC0xMHYtNnptLTEgNXYtNGgtOHY0eiIgZmlsbD0iI2ZmZiIvPg0KPC9zdmc+DQo=","isTrigger":false,"operationName":"Scope","operationDefinition":{"type":"Scope","actions":{"Select_Text2CSV":{"type":"Select","inputs":{"from":"@split(triggerBody(), decodeUriComponent('%0A'))","select":{"Columns":"@split(item(), decodeUriComponent('%09'))","Length":"@length(split(item(), decodeUriComponent('%09')))"}},"runAfter":{},"metadata":{"operationMetadataId":"63fe7035-9056-40a7-bb01-fa32a4c330ec"}},"Filter_array_SkipMeetingHeader":{"type":"Query","inputs":{"from":"@body('Select_Text2CSV')","where":"@greater(item()['Length'], 2)"},"runAfter":{"Select_Text2CSV":["Succeeded"]},"metadata":{"operationMetadataId":"0f50ee20-44a4-4586-a1d3-406c14e72922"}},"Compose_Headers":{"type":"Compose","inputs":"@first(body('Filter_array_SkipMeetingHeader'))?['Columns']","runAfter":{"Filter_array_SkipMeetingHeader":["Succeeded"]},"metadata":{"operationMetadataId":"dbcfdb8c-4815-42e1-9fb5-146a995062ca"}},"Create_CSV_table":{"type":"Table","inputs":{"from":"@body('Select_Mapping_CSV')","format":"CSV"},"runAfter":{"Select_Mapping_CSV":["Succeeded"]},"metadata":{"operationMetadataId":"7dad3500-46ec-4292-b480-d6b384443c68"}},"Select_Mapping_CSV":{"type":"Select","inputs":{"from":"@skip(body('Filter_array_SkipMeetingHeader'), 1)","select":{"@{outputs('Compose_Headers')[0]}":"@item()?['Columns'][0]","@{outputs('Compose_Headers')[1]}":"@item()?['Columns'][1]","@{outputs('Compose_Headers')[2]}":"@item()?['Columns'][1]","@{outputs('Compose_Headers')[3]}":"@item()?['Columns'][3]","@{outputs('Compose_Headers')[4]}":"@item()?['Columns'][4]","@{outputs('Compose_Headers')[5]}":"@item()?['Columns'][5]","@{outputs('Compose_Headers')[6]}":"@item()?['Columns'][6]"}},"runAfter":{"Compose_Headers":["Succeeded"]},"metadata":{"operationMetadataId":"239d1bf5-05e7-4758-a7a6-8b1bc52b07a4"}}},"runAfter":{},"metadata":{"operationMetadataId":"96c01f67-ea26-406c-852f-82287c07a98b"}}}

あとがき

あとは、変換するだけ・・
なんだけど、意外に一意に簡単に紐づけて変換するのが面倒だなぁ、というのが実感

keyword

how to convert Meeting Attendance Reports TSV to CSV in Power Automate

0
0
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
0