Google Apps Script(GAS)でスプレッドシートの値を読み書きする場合,最も基本的な操作として次のようなステップを経ます。
- Spreadsheetファイルを開く(
SpreadSheet
オブジェクトの取得) - Sheetを開く(
Sheet
オブジェクトの取得) - セルの範囲を指定(
Range
オブジェクトの取得) - 操作(値の取得
getValue(s)
や書きこみsetValue(s)
)
例えば次のようにしてデータを取得します。
function getTableFromSheet() {
// (1)Spreadsheetファイルを開く
const SHEET_URL = "";
const SHEET_NAME = "";
var spreadSheet = SpreadsheetApp.openByUrl(SHEET_URL);
// (2)Sheetを開く
var sheet = spreadSheet.getSheetByName(SHEET_NAME);
// (3)セルの範囲を指定・(4)値の取得
var table = sheet.getDataRange().getValues();
// 結果を表示
Logger.log(table);
}
以下では,この1~4の手順ごとによく使うメソッドを紹介していきます。
Spreadsheetファイルを開く
次の3つの方法のいずれかでスプレッドシートを指定し,開きます。
- URLで指定する
- IDで指定する
- 名前で指定する
URLから開く:openByUrl()
const SHEET_URL = "";
var spreadSheet = SpreadsheetApp.openByUrl(SHEET_URL);
IDから開く:openById()
const SHEET_ID = "";
var spreadSheet = SpreadsheetApp.openById(SHEET_ID);
シートのURLは
https://docs.google.com/spreadsheets/d/XXXXXXX/edit
のような形になっています。XXXXXXX
の部分がIDになります。
スプレッドシート名から開く:open()
Google DriveのAPIを使ってファイル名で検索し,そのFileオブジェクトを使ってシートを開く方法。
var files = DriveApp.getFilesByName('hoge');
var spreadSheet = SpreadsheetApp.open(files.next());
参考
Sheetを開く
名前で取得:getSheetByName()
const SHEET_URL = "";
const SHEET_NAME = "";
var spreadSheet = SpreadsheetApp.openByUrl(SHEET_URL);
var sheet = spreadSheet.getSheetByName(SHEET_NAME);
配列として取得:getSheets()
getSheets()
メソッドを使うとsheetオブジェクトの配列が取得できます。
var sheet = spreadSheet.getSheets()[1];
アクティブなシートを取得:getActiveSheet()
そのSpreadsheetを開いたら最初に表示されるシートを取得します。
(おそらく1番目のシートのことなのでgetSheets()[0]
と同じ結果になるはず)
var sheet = spreadSheet.getActiveSheet();
参考
セルの範囲を指定
値が入っている全範囲を取得:getDataRange()
var table = sheet.getDataRange();
指定範囲を取得:getRange()
いろんな書き方ができます。
getRange(row, column)
getRange(row, column, numRows)
getRange(row, column, numRows, numColumns)
getRange(a1Notation)
var cell = sheet.getRange("A1");
var table = sheet.getRange(1, 1, 2, 2);
参考
値の読み込み・書き込み
値の読み込み:getValue(s)()
-
getValue()
:Rangeのうち1つ目のセルの値を取得します。
var cell = sheet.getRange("A1").getValue();
-
getValues()
:Rangeのすべての値を2次元配列として取得します。
var table = sheet.getRange(1, 1, 3, 2).getValues();
値の書き込みsetValue(s)()
-
getValue(s)()
と同様
sheet.getRange(4, 1, 2, 3).setValues([[4, "Apple", 120],
[5, "Orange", 200]]);
行の追加:appendRow()
-
appendRow
:1行分のデータ(リスト)をシート末尾に追加 - ※これはRangeクラスのメソッドではなくSheetクラスのメソッド
sheet.appendRow([6, "Grape", 130]);