今回はOffice 365のPowerAppsからExcelファイルを読み書きしてみます。データソースにExcelファイルを使用しますので、誰でも割と簡単に作成したり試したりできます。
概要
今回はクラウドストレージであるOneDrive上にExcelファイルを配置し、それをPowerAppsから読み書きするアプリを作成します。
このような構成にするメリットデメリットとしては以下のような事柄が挙げられます。
メリット
モバイル端末からアクセスしやすい
スマートフォンやタブレット等のモバイル端末からのアクセスが圧倒的に楽ちんです。ファイラーアプリやOneDriveアプリから共有されたExcelファイルを選択し、モバイル版のExcelで開いて編集。この手間をPowerAppsでアプリを開くの1ステップにまとめることができます。
また、Excelファイルをそのまま見る場合より、PowerAppsで閲覧用のフォームを作成したほうがデータを読みやすいですし、表に出す必要が無いデータは非表示とすることもできて可読性が高いです。
Excelのライセンスが不要
PCで操作している場合は大体がExcelのライセンスを持っていると思います。しかし、スマホやタブレットといったモバイル端末ではライセンスを持っていない場合も多いのではないでしょうか。
この時、PowerAppsを経由してExcelファイルを操作しますので、それらライセンスを持っていなくともデータの読み書きが可能です。この辺は個人で使用する場合に特に役に立つのではないでしょうか。
(個人でPowerApps使うような人は少ないけど。。
入力の手間を省ける
データを登録する際に「登録日時」や「登録者」といったお決まりの情報があるかと思います。PowerAppsからデータを登録する際にはこれらが自動で登録されるようにすることが可能ですので、データ入力の手間を一部省くことが可能です。
これは日に数回データを登録するような、高頻度で使用される場合には大きな差となってきます。
デメリット
デメリットとしては「アプリ製作に手間と多少の知識が必要となる」くらいでしょうか。
Microsoftとしては簡単にアプリを作成できるということを謳っていますが、やはり多少の手間と若干専門的な知識は必要となってきます。この辺がPowerApps普及の壁となっていると勝手に思ってます。
作業
今回作成するアプリ
今回は作業例として「ブログの投稿内容を管理するアプリ」を作成してみます。ブログに投稿するタイトルとメモ、投稿先のサイト、ステータスをデータとして扱うようなアプリとします。
ブログのネタを思いついたらタイトルと投稿先サイト、内容のメモを登録。執筆を始めたり、投稿が完了したらステータスを変更する。そんな運用を想定し、保持するデータは下記のようにします。
- タイトル
- 投稿先サイト
- 内容メモ
- ステータス
- 登録日時
- 登録者
登録日時と登録者は無くてもよいデータですが、メリットとしてこの辺のことに触れたので一応入れときます。
Excelファイルを用意する
まずはデータソースとして使用するExcelファイルを用意します。これはOneDriveやGoogle Driveなどのクラウドストレージ上に配置する必要があり、また使用するデータ部分はテーブルである必要があります。
という訳でひとまずクラウドストレージ上にExcelファイルを作成します。ファイル名やパスは割となんでもOKです。今回はOneDriveを使用します。
※勿論、ローカルで作成したファイルをブラウザからアップロードしてもOKです。その場合次の手順を終えてから最後にアップしてください。
次にこのファイルを開いてテーブルを作成します。
まずは必要なデータの列ヘッダーを作ります。
次にヘッダー行を選択し「ホーム」タブの「テーブルとして書式設定」をクリック、好みの書式を選択します。
データ範囲の設定画面が表示されますので「先頭行をテーブルの見出しとして使用する」にチェックを入れて「OK」ボタンを押下します。
下のように書式が適用されればOKですので、ファイルを上書き保存して閉じましょう。
PowerAppsでアプリを作成
お次はいよいよPowerAppsでのアプリ作成になります。
ブラウザでPowerAppsのホーム画面を開き「このようなアプリを作成します」の「データから開始」を選択して「このアプリの作成」をクリックします。
データソースの選択画面に切り替わるので「OneDrive for Business」を選択します。通所のOneDriveやGoogle Driveを利用する場合は右向き矢印をクリックして新しい接続を作成してください。
次にデータソースとするファイルの選択画面が表示されるので、先ほど作成したファイルを選択します。
ファイル内に存在するテーブル一覧が表示されますので、先ほど作成したテーブルを選択して画面右下の「接続」ボタンを押下します。
※私の様にエクスプローラーから作業をしている場合、ファイルが同期されずに「テーブルがありません」というメッセージが表示されることがあります。ファイルを開いている場合は再度保存してから一度閉じて下さい。
アプリのビルドが完了するとアプリ編集画面が表示されます。これでひとまず作成は完了です。データの一覧画面、登録・編集画面、詳細閲覧画面が自動的に作成されます。
使ってみる
さて、作成したアプリがどんなものか実際に動かしてみましょう。テストデータ作成も兼ねて。
画面右上にアイコンが並んでいますが、この中の三角形アイコンがプレビュー起動です。これをクリックしましょう。
データ一覧の画面が起動しましたが、まだデータが無いので真っ白です。アプリ画面右上の + ボタンを押下してデータを登録してみましょう。
データ作成画面に遷移するので適当なデータを入力し、アプリ画面右上のチェックアイコンをクリックします。
再びデータ一覧画面に遷移し、作成したデータが表示されます。
右矢印( > )をクリックするとデータ詳細画面に遷移しますよっ!
ちなみにデータソースのExcelファイルもちゃんと更新されて、データが追加されています。
編集してみる
さて、触っていて気付いた方も多いかと思いますが、データ一覧画面や登録画面で表示される項目や順番がデフォルトだとイマイチです。そこで自分好み、使いやすい様に編集しましょう。
今回はすでに長くなってしまっていますので、編集後の画面だけ載せておきます。一応パワポっぽくいじれたりするので、少しご自身で触ってみて下さい。
左から一覧画面、詳細閲覧画面、新規・編集画面です。SharePointのリストと同じ構成ですね。
まとめ
PowerAppsからExcelファイルを読み書きするアプリを作成してみましたが如何でしたでしょうか。
アプリ作成までのハードルはかなり低く、殆どの人は躓くことなく作成できるかと思います。その先のアプリ編集が躓きポイントなのですが、ひとまずは編集せずともそれなりに使えるアプリが簡単に作成できます。
今後編集部分を掘り下げて記事を書いていく予定ですので、是非そちらも御覧ください。。
コメント
初めまして。コメント失礼します。
色々調べたのですが、どうやっても解決策を見つけることが出来ず、知恵をお借りできないかと思い、コメント致しました。
GoogleDrive上にあるExcelデータを基にアプリを作成したのですが、新規データを登録した後、更新するとデータが見れなくなってしまいます。
更新(Requery)する前はGalleryにデータが表示されているのですが、更新した後はデータが表示されなくなってしまいます。
GoogleDrive上にあるExcelデータには登録したデータはちゃんと入っています。
感覚から言うと、GoogleDriveの最新データをアプリが取得できないないようです。
その為、採番も元々のデータの一番最後の番号を取得して1つ足されている感じで、新規データを入力すると本当なら2、3、4となるはずが、ずっと2、2、2となってしまいます。
アプリが最新のデータを取得するには、何か必要な設定があるのでしょうか?
教えて欲しいです。宜しくお願い致します。
基本的には特別な設定無しで最新のデータを取得できるかと思います。
こちらでも試しにGoogleDrive上にExcelファイルを配置して動かしてみたのですが、更新後も特に問題なくデータの表示が可能でした。
原因切り分けの為に以下のような検証を行ってみてはいかがでしょうか。
・新規でシンプルなアプリを作り直してみる
⇒正しく動作したらカスタムした部分のバグの可能性
・Excelファイルを作り直してみる
⇒正しく動作したらファイルの問題
・Excelファイルの格納先をOneDriveに変更してみる
⇒正しく動作したらGoogleDriveとの接続の問題
ちなみに採番処理はどのように実装されていますか?
お返事有難うございます!
3点の検証をこれから行ってみます。
採番処理は、max_SNと言うテキストBOXで、エクセルの表にある一番大きな番号を取得させ、下記のコードで新しい番号を付けています。
If(EditForm1.Mode = New,If(Text(Year(仕入日Txt.SelectedDate),”[$-ja-JP]0000″) = Left(max_SN.Text,4) , Value(max_SN.Text) + 1 , Year(仕入日Txt.SelectedDate) & “001”),con_SN)
お返事有難うございます!
3つの検証のうち、エクセルのファイルを作り直してみたところ問題なく追加・検索できました。
そこで、そのエクセルデータに元々のデータを貼り付けて新規追加した所また同じ現象が起きたため、まず全てのデータを読み取れているのかを確認するためにCountRowsでレコードの数を数えたところ、2692あるデータの内500しか拾ってこないので調べてみると、設定を変えても最大2000のデータしか拾えないようですね。そのために一番最後のデータは読み取ることが出来なかったようです。
とてもいいアプリだと思いましたが、まさかこんなことで躓くとは思いませんでした。(T-T)
取り合えず、売却した商品のデータを削除しデータを減らして作りたいと思います。
問題解決に至るヒントを頂き本当に有難うございました。m(__)m
因みに、採番処理は、max_SNと言うテキストBOXで、エクセルの表にある一番大きな番号を取得させ、下記のコードで新しい番号を付けています。
If(EditForm1.Mode = New,If(Text(Year(仕入日Txt.SelectedDate),”[$-ja-JP]0000″) = Left(max_SN.Text,4) , Value(max_SN.Text) + 1 , Year(仕入日Txt.SelectedDate) & “001”),con_SN)
2000レコードなんて制限があったのですね、、、知りませんでした。。
そうすると週次や月次でファイルを置き換えるような運用が必要になってきますね。FlowやDBを組み合わせてみるとちょっとマシになるかもしれません。
採番処理のコードありがとうございます!
実装の参考にさせていただきます♪
初めまして。コメント失礼いたします。
現在アプリを作成中で、どうしても解決できないことがありまして
アプリからエクセルにPatch関数で値を書き込む操作があるのですが、正常に動作できています。
一方で登録した値を削除したいのですが、Remove関数で削除操作をしても、削除されません。
そもそもやり方が間違っているのかわからない状況です。
Removeでできるのか、他のやり方などご存じでしたら教えていただきたいです。
よろしくお願いします。
削除はRemoveでできたかと思います。
構文が正しいか、Excelファイルが開かれていないか、この辺りをもう一度確認してみるのがいいんじゃないでしょうか。
削除対象レコードの指定辺りが怪しい気がします。