Help us understand the problem. What is going on with this article?

Google App Maker ー Calculated モデルを使ってスプレッドシートのデータを表示する

More than 1 year has passed since last update.

App Maker のモデルには Drive Tables の他にも Calculated モデルというのがある。
Drive Tables はデータの保存に使えるが、Calculated は読み取り専用。
使いみちとしては、任意のデータをデータソースに設定できるという点が挙げられる。

App Maker はデータソースを使って画面とデータを紐付けるため、外部データを表示する場合なんかでとても重要になってくる。
スプレッドシートを読み取り専用のDBとして扱うパターンは結構多いはず。

本記事ではスクリプトからデータを作成するパターンと、スプレッドシートからデータを読み込むパターンで、どのように Calculated モデルを作るのかを解説する。

前提条件

次のようなNameEmailを持った Calculated モデルを作成しておく。
image.png

スクリプトからデータを作成

スクリプトでデータを作成していくパターン。
これをそのまま本番でつかうことはあまりないと思うが、基本なので解説しておく。

データソースの作成

次の画像は UserByScript という名前でデータソースを作った例。
image.png

コードは次のように記述する。

var records = [];

for (var i = 0; i < 10; i++) {
  var record = app.models.User.newRecord();
  record.Name = '名前'+ i;
  record.Email = 'hogehoge'+ i+ '@example.com';
  records.push(record);
}

return records;

ポイントは2点
1. app.models.{モデル名}.newRecord() で モデルに対応するレコードを作る
2. 1.のレコードの配列を return する

Tables ウィジェットで実際に画面に表示したところ

Name と Email が設定されていることが確認できる。
image.png

スプレッドシートからデータを作成

データを読み込むスプレッドシートを用意

事前に作成しておく。
image.png

データソースの作成

次の画像は UserBySpreadSheet という名前でデータソースを作った例。
image.png

コードは次のように記述する。
読み込むデータが違うだけで返却しているのはスクリプトからデータを作成した場合と同じになっているのがわかる。

var records = [];

var sheets = SpreadsheetApp.openById('1jqeCaq_8Ae1TaFIiNEcfJTQoYBM0z4d3uXLmgtaA_JU');
var sheet = sheets.getSheetByName('user');
var values = sheet.getDataRange().getValues();

var nameColumn, emailColumn;

for(var i = 0, len = values[0].length; i < len; i++){
  if(values[0][i] === 'Name'){
    nameColumn = i;
  }
  if(values[0][i] === 'Email'){
    emailColumn = i;
  }
}

for (var i = 1; i < values.length; i++) {
  var record = app.models.User.newRecord();
  record.Name = values[i][nameColumn];
  record.Email = values[i][emailColumn];
  records.push(record);
}

return records;

Tables ウィジェットで実際に画面に表示したところ

スプレッドシートの Name と Email が設定されていることが確認できる。
image.png

参考サイト

Calculated Models  |  App Maker  |  Google Developers

howdy39
heyinc corporate engineer https://techthetoaster.booth.pm/
https://howdy39.dev/
storesjp
インターネットビジネスの企画・開発・運営、マーケティング、プロモーション、コンテンツの企画・制作
https://about.stores.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした