MENU

SharePointリストに登録されたシリアル値から日付に変換する

やらかしました(-_-;)

ExcelからAutomateでリストへインポートするとき、画像のように日付がシリアル値になってしまってました。

なんでだ、と思ったら「期限」自体が「1行テキスト」でした。

あー…と今後の使い道を考えると…と納得はしましたが何とかしなければいけないのは変わらない。

ということで、登録されたシリアル値を他の日付表示に変換して保存し直しましょう。
(ノ_<。)
※ま、これはテストデータだったから作り直せば問題なんですけどね

目次

フロー

詳細フロー

トリガーは割愛させていただきます(*- -)(*_ _)

複数の項目の取得

リストからすべてのレコードを取得します

フィルタークエリには以下を記載

ID ne null

システムIDが空欄なのはあり得ないので、結果的に全部取得できます。
この時点で「/」が含まれるレコードだけに絞ることができれば後続アクションもすっきりするんですが、自分の力量ではできませんでした。(ノ_<。)

リストが100件以上ある場合は「設定」から「改ページ」をオンにして、しきい値を変更するのを忘れないようにしましょう。

For each

自分で入れる場合は「それぞれ適用する」で設定できますが、適当に「作成」を入れて、複数の項目の取得のIDでも設定しておけば、自動で繰り返しブロックが入ってくれます。
どちらでもお好きな方で。

パラメーターには以下を動的コンテンツで入れています

@{outputs('複数の項目の取得')?['body/value']}

分岐

「For each」の中に作成してください

分岐条件の中身は左記の通り。
「新しいデザイナー」だと1行目を設定すると2行目が勝手に追加されます。空欄にしておけば特に問題ない。

1行目の設定方法は下記の通り

左:@{items(‘For_each’)?[‘field_2’]}
央:含む
右:/

因みにこのフローの場合はシリアル値で保存されてる列「期限」の内部列が field_2 です。
設定する場合は自分のリストの内部列を設定してください

右側に投入するのは 半角英数字の / だけ。
動的コンテンツを挿入するのかシステムに勘違いされるので、コピペしてきた方が安全。

上記の設定を行うことで、期限列に既に yyyy/MM/dd で登録されているレコードは true へ流れ、シリアル値には / がないので false に流れるという仕様になります。

作成

データ操作 > 作成 を選択して挿入します

入力するには式で以下を設定

addDays('1899-12-30', int(items('For_each')?['field_2']), 'yyyy/MM/dd')

Excelの基準日が1899-12-30らしいので、それに加算して、あとは書式を西暦表記に整えます。

項目の更新

最後に、シリアル値と日付を入れ替えましょう。

IDには「複数の項目の取得」で得たIDを動的コンテンツで設定します。

@{items('For_each')?['ID']}

詳細パラメーター(画像下半分)は、シリアル値が入ってしまっている列を指定します。

私の場合は「期限」という列だったのでそれを表示させ、先ほど「作成」したブロックの値を設定します。

結果

はい、これでフローを動かしてみます。

5000件を超えるリストでしたので、全件やってみたら30分ぐらいの稼働時間になってしまいました。

でもちゃんと期限に日付が入ってきましたね。

良かった良かった。

(今回のフローは繰り返しの中で変数使ってなかったから並列処理しても良かったかもしれん)

広告

目次