PowerAutomateのワークフローからOneDriveやSharePointで管理されたExcelのデータにアクセスする場合、日付データについての制約があります。
Background
PowerAutomateの日付データはISO8601形式の文字列型データ、対してExcelの日付データは1900年1月1日を起点とするシリアル値です。
以前はPowerAutomateからExcelのデータを参照したり更新したりする場合、2つのデータ型の間をフロー開発者が自分自身で取り持ってやる(相互変換してやる)必要がありました。
これをしないと、PowerAutomateの日付データは文字列そののままの内容でExcelに書き出され、Excelの日付データはシリアル値そのままの内容でPowerAutomateに読み込まれてしまうという問題があったのです。
2021年現在「DateTime形式」というオプションが追加され、この問題が改善しました。
Problem
しかしこの「DateTime形式」で ISO 8601
を選択していても日付データが相互変換されないことがあります。
つまり従来どおり、PowerAutomateの日付データは文字列そののままの内容でExcelに書き出され、Excelの日付データはシリアル値そのままの内容でPowerAutomateに読み込まれてしまうということです。
このような違いはどうして起きるのでしょうか?
Solution
「DateTime形式」で ISO 8601
を選択して日付データの相互変換をするには以下の条件をいずれも満たす必要があるようです:
- 列の表示形式が「日付」ないし「時刻」になっていること
- 列の最初の行のデータが日付ないし時刻として妥当な値(ようするにシリアル値)であること
例えば、次のテーブルでは DATE2
~ DATE5
はいずれも「表示形式」が「日付」となっています。 2021/11/14
や 2021/11/15
と表示されている部分はシリアル値が入力されている状態、対して ISO8601形式の日付が表示されている部分は文字列が入力されている状態です:
「DateTime形式」で ISO 8601
を選択した状態のアクションを使い、このテーブルからレコードを読み取ったり書き込んだりすると、 DATE3
や DATE4
の列は相互変換が行われますが、 DATE2
や DATE5
の列は行われません(個別のセルごとに変換の有無が変わるのではなく、条件に該当する列のセルはすべて変換、該当しない列のセルはすべて変換なしになります)。
このように、「DateTime形式」の機能を使う場合は列の「表示形式」だけでなくその列に実際に入力されている値についても考慮する必要があります。