GASによるSpreadsheetの基本操作まとめ


Google Apps Script（GAS）でスプレッドシートの値を読み書きする場合，最も基本的な操作として次のようなステップを経ます。

1. Spreadsheetファイルを開く（`SpreadSheet`オブジェクトの取得）
2. Sheetを開く（`Sheet`オブジェクトの取得）
3. セルの範囲を指定（`Range`オブジェクトの取得）
4. 操作（値の取得`getValue(s)`や書きこみ`setValue(s)`）



例えば次のようにしてデータを取得します。

```javascript
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ファイルを開く

次の３つの方法のいずれかでスプレッドシートを指定し，開きます。

1. URLで指定する
2. IDで指定する
3. 名前で指定する

### URLから開く：`openByUrl()`

```javascript
const SHEET_URL = "";
var spreadSheet = SpreadsheetApp.openByUrl(SHEET_URL);
```

### IDから開く：`openById()`

```javascript
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オブジェクトを使ってシートを開く方法。

```javascript
var files = DriveApp.getFilesByName('hoge');
var spreadSheet = SpreadsheetApp.open(files.next());
```


### 参考
- [Class SpreadsheetApp  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app)
- [Class File  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/reference/drive/file)


## Sheetを開く


### 名前で取得：`getSheetByName()`

```javascript
const SHEET_URL = "";
const SHEET_NAME = "";
var spreadSheet = SpreadsheetApp.openByUrl(SHEET_URL);
var sheet = spreadSheet.getSheetByName(SHEET_NAME);
```

### 配列として取得：`getSheets()`

`getSheets()`メソッドを使うとsheetオブジェクトの配列が取得できます。

```javascript
var sheet = spreadSheet.getSheets()[1];
```

### アクティブなシートを取得：`getActiveSheet()`

そのSpreadsheetを開いたら最初に表示されるシートを取得します。

（おそらく１番目のシートのことなので`getSheets()[0]`と同じ結果になるはず）

```javascript
var sheet = spreadSheet.getActiveSheet();
```

### 参考
- [Class Spreadsheet  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet)

## セルの範囲を指定

### 値が入っている全範囲を取得：`getDataRange()`

```javascript
var table = sheet.getDataRange();
```

### 指定範囲を取得：`getRange()`

いろんな書き方ができます。

- `getRange(row, column)`
- `getRange(row, column, numRows)`
- `getRange(row, column, numRows, numColumns)`
- `getRange(a1Notation)`

```javascript
var cell = sheet.getRange("A1");
var table = sheet.getRange(1, 1, 2, 2);
```

### 参考

- [Class Sheet  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/reference/spreadsheet/sheet)

## 値の読み込み・書き込み

### 値の読み込み：`getValue(s)()`

- `getValue()`：Rangeのうち１つ目のセルの値を取得します。

```javascript
var cell = sheet.getRange("A1").getValue();
```

- `getValues()` ：Rangeのすべての値を２次元配列として取得します。

```javascript
var table = sheet.getRange(1, 1, 3, 2).getValues();
```

### 値の書き込み`setValue(s)()`

- `getValue(s)()`と同様

```javascript
sheet.getRange(4, 1, 2, 3).setValues([[4, "Apple", 120],
                                      [5, "Orange", 200]]);
```

### 行の追加：`appendRow()`

- `appendRow`：1行分のデータ（リスト）をシート末尾に追加
- ※これはRangeクラスのメソッドではなくSheetクラスのメソッド

```javascript
sheet.appendRow([6, "Grape", 130]);
```


### 参考
- [Class Range  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/reference/spreadsheet/range)
- [Class Sheet  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/reference/spreadsheet/sheet)