ブログ

読んで思い出す。忘れるために書く

Google Apps Script で外部から取得したJSON データをGoogle Sheets に書き込む

Google Apps Script(GAS) を使ったみたのと、外部から何か値を取得してみた

まとめ

JSON を返却してくれるサーバに問い合わせる場合は「UrlFetchApp + JSON.parse()」を使うとしあわせになれるかもしれない

GAS でゴリゴリ書く感じではないと思うので、用途によっては外部リソースを簡単に取得できる中間サーバを用意するなどしたい

公式ドキュメントを Web ブラウザのページ内検索機能を駆使しつつ閲覧するのつらい

説明しないこと

  • Google Apps Script の書き方と、その柔軟な書き方
  • 記述した Google Apps Script をSpreadsheet 上で実行する方法
  • Heroku の使い方
  • PHP の書き方

書いたコード

実行するたびに「Hello, World!」が増えていく

index.php (Heroku にデプロイ):

<?php

$data = array(
  'message' => 'Hello, World!'
);
header('Content-Type: application/json');
echo json_encode($data);

Code.gs :

// Entry Point
function myFunction() {
  var data = getRemoteResource();
  setDataToSheet1(data['message']);
}

function getSheet1() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");
  
  return sheet;
}

function getRemoteResource() {
  var url = 'https://peaceful-sea-77297.herokuapp.com/';
  var response = UrlFetchApp.fetch(url);
  var data = JSON.parse(response.getContentText());
  
  return data;
}

// 既に書き込まれたセルの1つ下を(書き込みしつつ)探す
// A列から1つずつ下に書き込むセル位置をずらして処理する
function setDataToSheet1(data) {
 var i = 1;
  while(true) {
    var d = getSheet1().getRange('A' + i).getValue();
    getSheet1().getRange('A' + i++).setValue(data);
    if (d.length == 0) { break; }
  }
}

Links