はじめに
「Power AutomateでExcelデータをSharePointリストに取り込めない!」という相談をもらいました。本当に取り込めないのか実際に確認してみます。
前提
実施しようとしていることは以下の通りです。
- 定型のExcelデータをPower Automateに渡す
- Excelデータを読み取り、もともと用意していたSharePointリストへ行追加する
では検証用環境を整えるところからやっていきましょう。
登録先となるSharePointリスト
検証用なので仮のリストを作ります。「冷蔵庫の中身」というリストを作成し、1件データ入れておきました。
列の種類は以下の通り。
列名 | 内部名 | 列の種類 | 必須 |
---|---|---|---|
タイトル | Title | 1行テキスト | 必須 |
保持数量 | qty | 数値 | |
購入可能最高額 | prc | 通貨 |
作成した列は、保持数量と購入可能最高額だけです。
内部名をわかりやすくするため、列名は一度アルファベットで作成したあとに直しています。
列作成時に日本語で名称をつけてしまうと内部名がやたら長くなるのでアルファベットで登録しあとでリネームすることを推奨します。
※内部名はときどき直接書くことがあるので。
登録したいExcel
データはテーブルにしておきます。テーブル名自体は何でもいいですが今回は「TBL」にしておきます。
なお、一応表示形式を見てみたらどの列も「標準」の状態です。
Automateでやってみる
それではPower Automateで新規のフローを作成していきます。
1.フローの作成〜Excelの読み込み
トリガーはインスタントクラウドフローで手動トリガーとします。
その後、Excel Online(Business)の「表内に存在する行を一覧表示」アクションを追加します。
今回は取り込むExcelを決め打ちしているので、細かい設定は迷わないと思いますが、ファイルを置いた環境に応じて設定します。
(アップロードしたファイルを取り込みたいパターンはそのうち別記事でやるかも)
2.SharePointリストに「項目の作成」
次のアクションはSharePoint「項目の作成」とします。
保存したいリストがあるサイトのアドレスと、リスト名を選択します。
すると、リストの項目が自動で表示されます。
タイトルを入力しようとすると候補として、動的なコンテンツが表示されます。
リストでいうタイトル列は食材を入力する列だったので、ここでは「食材名」を選択します。
すると、以下のような画面になりました。
食材名はあくまで列名なので、Excelから読み取ろうとするといくつも値が存在します。
それを察したAutomateくんが「こうでしょ?」と言わんばかりに、処理を繰り返して一つずつ取り出し「項目の作成」をするフローにしてくれました。
3.「項目の作成」の続き
「タイトル」は設定できましたので、残りの「保持数量」、「購入可能最高額」を入れていきます。「保持数量」欄にフォーカスをあて、動的なコンテンツから「数量」を取り出そうとします。
すると以下の通り。
・・・「数量」がない!となるところです。
慣れれば「ああ、そっか」というところかもしれません。
これはSharePointリスト側では「保持数量」は数値の値を受け取ることを想定しているのに対して、Excelで読み取った「数量」は文字列扱いされているためだと思います。
テキストを数値に置き換えて値を渡すべく、「保持数量」および「購入可能最高額」欄には以下の式を入れます。
int(items('Apply_to_each')?['数量'])
int(items('Apply_to_each')?['購入可能最高額'])
結果
テスト実行したところ、無事動きました。
トマトケチャップしかなかったリストに、Excelに記載していた三件が追加されたことが確認できます。
SharePoint側の列の種類に合わせてデータを渡しましょう!という話でした。
余談
- 話を聞いたときに、手を動かしてみてなぜか私もダメだったのですがやり直してみたら大丈夫でした。おそらく式のカッコ[]を間違っていたのかなと。
- SharePointリストのグリッドビューに対して貼り付けるのが一番簡単(ぼそっ)。
- Excelが***行超えた場合の考慮も本来は必要です。
- トリガーでファイルをアップロードさせる場合はもう一工夫必要ですね。