見出し画像

【FileMaker】スプレッドシートからデータを取得したいんだ!

経緯

FileMakerだと細かな管理が何かと面倒!
でも共有するときはFileMaker上で見えるようにしたい!
そんなときにスプレッドシートでデータを管理しようと考えました。

※2022/11現在
Google Sheet API v4対応


事前準備

スプレッドシートの共有とIDの確認 ※1

まず、スプレッドシートは閲覧者が確認できる(FileMakerで接続できる)範囲で共有しておきます。

次にスプレッドシートのIDを確認してメモっておきます。
https://docs.google.com/spreadsheets/d/{ID}/edit#gid=0
/d/よりも後ろの値がスプレッドシート固有のIDです。

今回は何らかの申請管理をイメージしてみました。

Google Sheet APIキーの用意 ※2

Google Cloud PlatformでAPIキーを発行します。
カギ自体は【+認証情報を作成】をクリックすると自動で作成されます。
こちらもメモっておいてください。


実装

完成イメージ

上のボタンでデータを取得して、下のボタンでデータをテーブルに表示させます。

テーブル/フィールド作成

スプレッドシートの内容を格納するテーブル
各種IDやKEYを設定するテーブル

テストですので再利用しやすくするためにグローバル変数にしています。

JSONデータ取得

GET_JSON

データ取得先のURLを作成し、「URLから挿入」を使ってデータをフィールドに挿入します。

URLの作成は少し面倒ですがこうなります。

フィールド設定 URL
"https://sheets.googleapis.com/v4/spreadsheets/" & // 固定
InputTable::SPREAD_ID & // ※1で取得したID
"/values/"// 固定
InputTable::SHEET_NAME & // ※1の取得するデータのシート名
"?key=" & InputTable::API_KEY // ※2で取得したKEY

ここまで準備できたらボタンに「GET_JSON」を割当て実行してみましょう
dataが入ってくると思います。

あとはポータルの変数に移してあげるだけです!

ポータルに反映

JSONデータが[googlespreadsheetdata]フィールドに入っている状態で、スクリプト「DISP_TABLE」を実行します。

このスクリプトではJSONGetElement関数を利用して配列1つずつを変数に入れ、各フィールドへと格納しています。

スプレッドシートから取得したデータは、key[values]の中に格納されています。こんな感じで1つずつ取得していきます。

JSONGetElement( InputTable::googlespreadsheetdata; "values[" & $cnt & "][0]" )

$cntの後ろにある添え字は列番号です。
このスクリプトをボタンに割り当てて実行すると。。。

こんな感じでテーブルに表示されます!

FileMakerとスプレッドシートの連携で出来ることが増えそうです!!

今のところの課題はループを使うと件数が多いとそこそこ遅いことと
データを取得するときの範囲指定かなあ。


この記事が気に入ったらサポートをしてみませんか?