5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Excelファイルの中身をSharePoint Online にコピーする

Posted at

本日のやりたいこと

Excelファイルに必要事項を記入してもらいます。それを回収して集計したいときなどに利用できると思います。

なお、今回はテーブル化されたExcelシートを各人に配布し、記入してもらったら指定されたSharePointライブラリに放り込んでもらうという運用を想定しています。

こんなファイルをみんなに配って記入してもらう
image.png

ライブラリ(ファイル置き場)に入れてもらう
image.png

Power Automateワークフローが起動し、SHarePointリストにデータが入る
image.png

Excel ファイルを作成する

まずは必要な「列」を作成します。この例だと「名前」「住所」「スコア」「評価」ですね。
image.png
範囲指定してから「テーブル」をクリックします。
image.png
先頭行は見出しにします。
image.png

このようにテーブル化ができました。
image.png
ちなみに、Power Automate で Excel データを扱う場合、基本的にはテーブル内のデータを操作することになります。 Office Script を利用するとセルの操作が行えます。

出来上がったExcelファイルはSharePointライブラリにアップロードしておきます。

SPO リストを作る

次に、リストを作成します。SharePointサイトを開き新規→リストを選択します。
image.png

Excelから を選択し、先ほどアップロードしたExcelファイルを選択します。
image.png

各列が認識されますので、「型」を正しいものに変更します。
image.png
名前を付けて作成します。
image.png

これでリストは完成です。
image.png

SPO ライブラリを作る

次に、ライブラリを作成します。リストと同様にサイトトップから「新規→ドキュメントライブラリ」を選択し、任意の名前を付けます。
image.png

これで準備ができました。

サンプルデータを作っておく

とりあえずテスト用にデータが入っているExcelファイルを作っておきましょう。

image.png

Power Auotomate を作る

さて、いよいよAutomateの作成です。ちなみに、あらかじめExcelファイルが指定できるのであれば以下のようにアクションで項目が認識できるのですが、今回はこの方法は使えません。
image.png

Power Automateホームを開き、「マイフロー」→「新しいフロー」→「自動化されたクラウドフロー」を選択します。
トリガーはSharePointの「フォルダー内にファイルが作成されたとき」です。

image.png

トリガーの「サイトのアドレス」はライブラリのアドレス、フォルダーIDは上記で作成したライブラリをファイルアイコンから選択します。
image.png
※ライブラリ名を半角にした場合はその名前、全角にした場合はDocLib~になります。

次のアクションは Excel Online (Business)の「テーブルの取得」になります。サイト、ドキュメントライブラリを指定します。ファイルには[x-ms-file-name-encoded]を指定します。

image.png

つづいて、Excel Online(Business) の「表内に存在する行を一覧表示」を追加します。これで、表(=テーブル)に存在しているデータを一気に取得します。場所(サイト)とドキュメントライブラリを選択した後、ファイルを選択します。
image.png

テーブルは「テーブルの取得」アクションで取得した値を利用しますが、テーブルを選択した後「カスタム値の入力」をクリックし以下のように選択すると…
image.png
以下のようにループ(Apply to Each)が追加されます。
image.png
これは、一つのExcelファイルに複数のテーブルがある可能性を考慮してこのようになっています。

テーブルの中身を取得する

さて、ここまでの動作でテーブルの中身のデータは取得できたのですが、テーブルの構造(どんな列があるのか)はPower Automateとしてはわかっていません。なので、構造を解析する必要があります。試しに、ここで一度テスト実行をしましょう。
右上のテストをクリックし「手動」を選択し「テスト」ボタンをクリックします。
image.png
この状態で、ライブラリにExcelファイルをコピーします。
image.png
するとフロー(テスト)が正常終了している(はず)です。

image.png

どんなデータが入っているか確認します。Apply to each の中身を開き、「表内に存在する行を一覧表示」を開きます。出力の「未加工出力の表示」をクリックします。
image.png
右に出力されたデータをメモ帳にコピーしておきます。

さて、続きを作成します。
「編集」をクリックし、Apply to Each内の「アクションの追加」をクリックし、「JSON の解析」を選択します。

image.png
コンテンツに表内に存在する行を一覧表示の「body」(または本文)を選択し、「サンプルから生成」をクリックします。
image.png
サンプルJSONペイロードの挿入に先ほどメモ帳にコピーしたJSONデータのうち、body 以下を貼り付けます。さらに一番先頭に { を一つ追加します。
image.png

SPOリストに書き込み

ここまでで、Excelテーブルにあるデータをすべて取得し、解析ができたことになります。あとはSPOリストにデータを追加しましょう。
アクションの追加をクリックし、SharePoint Onlineの「項目の作成」をクリックします。サイトのアドレスとリスト名を選択すると以下のようになります。
image.png

各列にJSONに入っている値を入れていきます。まずは名前をクリックしてみましょう。すると、「JSONの解析」から名前を入れることができます。
これを選択すると
image.png
以下のようにループが自動作成されます。行が複数あるからですね。
image.png
あとは同じように住所、評価等残りの列を設定していきます。
image.png
ただ、スコア(数値)がそのままだと入らないはずです。これは変換が必要になります。

int(items('Apply_to_Each_2')?['スコア'])

のように式を入力しましょう。

image.png

これで完成です。

image.png

要調整(重要)

では動作確認をします。もう一度手動テストでファイルをアップロードしなおしてもよいですが、先ほどのファイルでテストすることもできます。
右上のテストをクリックし、自動→最近使用したトリガーで→成功 をクリックします。
image.png

「保存&テスト」を実行すると失敗します…。
image.png

見てみると、body('JSON_の解析')?['body]?['value']がNullというエラーです。これはbody('JSON_の解析')?['value']が正しいように思えますので、そのように直してみましょう。
編集でApply to each 2 の「以下の手順から出力を選択」を削除し、「式」で以下を入力します。

body('JSON_の解析')?['value']
image.png

保存して再テストします。今度は成功しました。
image.png

SharePointリストを確認すると追加されています。

image.png

まとめ

Excel テーブルの読み込みは、ファイルをフローの中で指定していれば、列定義をそのまま読み取ることができます。しかし、今回のように、フローで特定のファイルを指定できない場合は、生データ(?)を読み込みJSON解析をすることで利用することが可能です。

ただ、自動で追加されるループを書き直す必要がある理由は、ちょっと謎でした…考えてみます。

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?