スプレッドシート操作編
スプレッドシートとよく使う値の変数定義
スプレッドシートに関連したGASではほぼ必ず使用するオブジェクト(?)達を最初に変数定義します。
シートの値全てを用いた処理を行う際は、後に出てくる「セルを複数列・複数行で取得し、リストに格納する」とセットで宣言しておくと便利です。
僕はGASを書くときはこのブログ記事を開いてここからコピペすることから始めています。
//シートのURLを入力
const SHEET_URL = 'SHEET_URL';
// シートを変数定義
const SHEET = SpreadsheetApp.openByUrl(SHEET_URL);
const SS = SHEET.getSheetByName("シート1");
// シートの最終行を取得
let lastRow = SS.getLastRow();
// シートの最終列を取得
let lastColumn = SS.getLastColumn();
// アクティブなセルを取得
let activeCell = SS.getActiveCell();
// アクティブなセルの行を取得
let activeRow = activeCell.getRow();
// アクティブなセルの列を取得
let activeColumn = activeCell.getColumn();
スプレッドシートのメニューバーにボタンを追加
スプレッドシートのメニューバーに、GASを起動するボタンを追加します。
スプレッドシートを開いて作業する場合にあると便利だったりするプログラムを追加します。
// 以下を実行するとメニューバーに追加される
SpreadsheetApp.getActiveSpreadsheet().addMenu('メニューバー', [
{ name: '機能その1', functionName: 'func1' },// 「function func1()」が起動する
{ name: '機能その2', functionName: 'func2' },// 「function func2()」が起動する
]);
セルを複数列・複数行で取得し、リストに格納する
1行ずつ取得してコードを実行するより、全リストを取得して配列ごとにコードを実行するほうが早いので、スプレッドシートから情報を取得する際はこの一回で済ませることが多いです。
// 全データリストを変数定義
let lists = [];
let FIRST_ROW = 2;// 大抵のスプレッドシートデータは2行目から始まるので2にしています
// 1行分ずつリストにして、全データリストに加えるループを作成する
for (i = FIRST_ROW; i <= lastRow; i++) {
// i行目を最終列まで二次元配列で取得し、flat()で一次元配列に変換
let list = SS.getRange(i, 1, 1,lastColumn).getValues().flat();
lists.push(list);
}
Logger.log(lists);
フォーム編
フォームの作成+フォームのIDを取得
// Googleフォームを作成する+作成したフォームのIDを取得する
const TITLE = "ここにフォームのタイトルが入ります";
const FORM = FormApp.create(TITLE).setTitle(TITLE);
const FORM_ID = FORM.getId();
小テストの設定
// 小テストの設定
FORM.setIsQuiz(true);
// 結果を集計するか否か?
FORM.setPublishingSummary(true);
質問の追加
ラジオボタン形式の質問
// ラジオボタン形式の質問の追加
let radio = FORM.addMultipleChoiceItem()
.setTitle("質問の本文")// 質問の本文を設定
.setPoints(1)// テスト形式のときの得点を設定
.setRequired(true)// 必須項目の設定
radio.setChoices([
radio.createChoice("A",true), // 正解選択肢は2つ目のプロパティにtrue
radio.createChoice("B",false) // 不正解選択肢は2つ目のプロパティにfalse
]);
ドライブ・フォルダ操作編
フォルダの変数定義
// フォルダのIDを入力
const FOLDER_ID = "フォルダーURLの末尾を入力";
// フォルダを変数定義
let FOLDER = DriveApp.getFolderById(folderID);
ファイルを特定のフォルダに移動する
const NEW_FOLDER = DribeApp.getFolderById("移動先のフォルダのID");
Driveapp.getFileById("移動させるファイルのID").moveTo(NEW_FOLDER);
Webアプリ編
基本:APIを叩く
GASでAPIを叩くときは、UrlFetchAppメソッドを使います。
UrlFetchApp.fetch()はGETもPOSTも送れて汎用性が高く一般的に利用されています。
UrlFetchApp.post()でも叩くことは可能ですが、methodにPOSTを指定しなければならないのは同じなので、fetch()で良いと思います。
const url = "ここにAPIのエンドポイントとなるURIを入力する";
// リクエストヘッダーを設定する
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer ここにアクセストークンを入力する"
};
// リクエストボディを設定する
const data = {
"ここにAPIに対応したリクエストボディを設定する"
};
// optionsにリクエストをまとめる
const options = {
"method": "POST",// HTTPレスポンスの型を設定する
"headers": headers,
"payload": JSON.stringify(data)
};
// UrlFetchApp.Fetch()メソッドでHTTPリクエストを送信する
const response = UrlFetchApp.fetch(url, options);
APIを作る(doPost)
function doPost(e) {
var requestData = JSON.parse(e.postData.contents);
// 例: リクエストデータに基づいて応答を作成
var result = {
status: 'received',
data: requestData
};
return ContentService.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
}
ContentService
は、Google Apps Script (GAS) で利用可能なサービスの一つで、スクリプトからの出力を様々なコンテンツタイプ(例えば、JSON、XML、RSSなど)で提供することを可能にします。
プロパティサービスを利用する
APIキーなどの大事なデータは平文で保存せず、GASのプロパティサービスに登録すると良いです。
プロパティサービスに登録された値は、そのスクリプトからのみアクセス可能です。ユーザーのプロパティやドキュメントのプロパティにはそれぞれのアクセス権限があるため、不正なアクセスを防ぐ一定のセキュリティが提供されます。
利用するときは、「保存」「閲覧」「取得」「削除」のスクリプトを知っておく必要があります。
プロパティサービスの保存
function saveApiKey() {
var scriptProperties = PropertiesService.getScriptProperties();
scriptProperties.setProperty('YOUR_PROPERTY_KEY', 'ここに値を入力する');
}
スクリプト内の全プロパティサービスの閲覧
function getAllProperties() {
var scriptProperties = PropertiesService.getScriptProperties();
var allProperties = scriptProperties.getProperties();
Logger.log(allProperties);
}
プロパティサービスの取得
function getProperty()
var scriptProperties = PropertiesService.getScriptProperties();
var apiKey = scriptProperties.getProperty('ここに取得したいプロパティキー');
プロパティサービスの削除
var scriptProperties = PropertiesService.getScriptProperties();
scriptProperties.deleteProperty('YOUR_PROPERTY_KEY');
コメント