2021年になってすぐにTwitterで話題になっていた、Power Automate の Excelコネクターに関して、正式なアップデートが確認できたので紹介します。
これまでの動作
Excelコネクターを利用してExcel内のテーブルデータを取得した際、日付・日時型の列はExcelのシリアル値で返却されていました。
Excelのシリアル値とは、1900年1月1日を「1」とした連番で、時間を含む場合には小数点になります。 例えば2020年12月25日は「44190」となります。
Power Automate でこのようなデータを扱う場合には、
addSeconds('1899/12/30T00:00:00',int(string(mul( ここに日付列 ,86400.0))))
このような式を挿入して Power Automate で利用可能な日時型に変換していました。
※問題になったのは、1月11日に突然この日付型の列がISO 8601形式 (YYYY-MM-DDTHH:mm:ssZ) を返すようになったため、既存のフローがエラーになったということです。1月21日にリバートされました。
新しいオプション : DateTime Format
アナウンス通り、上記の問題に対する修正として、新しいオプション "DateTime Format" が追加されました。 (2021/1/26 時点ではPreview環境のみ)
既存のフローでは何も設定されていない状態になります。この場合にはこれまで通りシリアル値が返却されます。
一方で、オプションを有効にすると ( = 選択肢のいずれかを選択すると)、ISO 8601で返却されるように設定することができます。
確認した範囲ではExcelの日付・日時型でフォーマットされた列であれば、Excel側での表示形式によらず、DateTime Formatの対象になっていました。(つまり13:30でも、2020年1月1日13:30でも、どちらも 2020-01-01T13:30:00Zを返す)
これまでの不要な計算がなくなるのは非常にありがたいですね。まあ、UTCで返されるので少し気を付ける必要がありますが(後述)
注意事項
今後の一般環境へのリリースで変更があれば修正しますが、お気づきのとおり、Excelで入力した日付・時刻は、UTCとして返却されます。
SharePointのような「UI上はユーザーのタイムゾーンに揃うけど、データとしてはUTCで管理している」ではなく、入力した値をUTCの情報として返す点が特徴的です。
通常であれば、UTCでとれたものは"タイムゾーンの変換"アクションで自分たちのローカルタイムに合わせますが、Excelの場合にはローカルの日時としてデータを扱いたい場合には、"タイムゾーンの変換"アクションで、UTC→UTCに変換してフォーマットを指定するとよいでしょう。
※セルに入力された値が、どのタイムゾーンで入力されたかによらずUTCと認識されるので、UTCとしてフォーマットだけを変えている。
以上、うれしいアップデートと注意事項についてでした。