本記事では、スプレッドシートを操作する際によく使うメソッドを用途別に整理しました。
「GASでスプレッドシートを操作したいけど毎回調べるのがめんどくさい!」などという方の役に立てば幸いです。
1. Spreadsheet/Sheetの取得
// スプレッドシートのスクリプトエディタ内で実行する場合
const ss = SpreadsheetApp.getActiveSpreadsheet();
// 確実に ID を指定したい場合
const ssById = SpreadsheetApp.openById('スプレッドシートのID');
// シート名から取得(ss は Spreadsheet のインスタンス)
const sheet = ss.getSheetByName('Sheet1');
getActiveSpreadsheet()は確実性が低いので、時間手動トリガーなどで使う場合はopenByIdを使ったほうが安全。
2. 範囲(Range) / 値(Value)の取得
getRange(行番号, 列番号, 取得する行数, 取得する列数);
// A1記法でも指定可能
getRange('A1:C10');
//単一セルの値を返す
range.getValue();
//2次元配列を返す
range.getValues();
※getValueとgetValuesは混同しやすいので注意。ここをミスしていると、アクセスするときにエラーが出てしまう。
//左上から1行×1列取得
const range = sheet.getRange(1, 1, 1, 1);
//2通りの方法でセルの値を取得
const values = range.getValues(); //[[ 'セルA1' ]]
const value = range.getValue(); //"セルA1"
//rangeとvalueを同時に取得する場合
const values = sheet.getRange(1, 1, 10, 3).getValues(); // 10行×3列
実際にセルの値を取得するときはgetValues()でまとめて取得する方が効率良いのでおすすめ。
// 先頭セルの値にアクセスする例
const topLeft = values[0][0];
getValues()で取得した場合、返り値は行数・列数に関わらず2次元配列となるので注意。例えば1行取得した場合、アクセスはvalues[0][i]のようにする。
3. セル操作
// セルを空にする(内容のみ)
sheet.getRange(1, 1, 1, 1).clearContent();
// 特定の範囲に一括で書き込む
//2次元配列のデータを用意
const data = [['A1', 'B1'], ['A2', 'B2']];
//左上からデータ範囲分だけ書き込む
sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
getValues()と同様に、setValues()もなるべくまとめてやると効率が良くなる。
4. 最終行・最終列の取得
const lastRow = sheet.getLastRow();
const lastCol = sheet.getLastColumn();
const maxRows = sheet.getMaxRows();
const maxCols = sheet.getMaxColumns();
getLastRow()系は、空白のセルがあるときに誤差がでたりするので注意。
5. Propertiesサービス
Key-Valueで文字列を保存できる機能。
保存した文字列は関数をまたいでアクセスできるようになる。
//保存
PropertiesService.getScriptProperties().setProperty('Key', Value);
//参照
PropertiesService.getScriptProperties().getProperty('PROBLEM_NUMBER');
おまけ:Form関係
フォームとスプレッドシートの連携はよく行うのでまとめておく。
// フォームを作成
const form = FormApp.create('アンケート');
//スプレッドシートと連携させる
form.setDestination(FormApp.DestinationType.SPREADSHEET, sheet.getId());
さいごに
今回はGASでスプレ操作する際によく使うメソッドをまとめました。
どうやって書くのか忘れたときなどにぜひ使ってください。