Google App Script (Gas)   参考サイトとメモ

###  概要

https://qiita.com/Brutus/items/efbd5fda4c9316fc9e3b

### 関数

https://www.javadrive.jp/javascript/function/index2.html

```
function 関数名(){
  実行される処理1;
  実行される処理2;
  ...

  return 戻り値;
}
```


### よく使うメソッド一覧

https://zenn.dev/d0ne1s/articles/a4663b9cd3dce7

### 配列（Array）

https://www.tohoho-web.com/js/array.htm

配列の作成
多次元配列
配列の長さ   `array.length`
配列のループ 
配列の検査
配列の連結  `array.concat(array2, ...)`  ,`array.join([separator])`
配列要素の取り出しと追加
配列の並べ替え `array.sort([func])`,`array.reverse()`
配列から文字列への変換 `array.toString()`,`array.toLocaleString([locales[, options]])`
配列要素の変更
分割代入
スプレッド構文
型付き配列

### 配列処理のメソッド

https://moripro.net/gas-array-method/
| メソッド | 効果 |
| -- | -- |
|shiftメソッド|配列の最初の要素を取り出す|
|unshiftメソッド|配列の先頭に新しい要素を追加する|
|pushメソッド|配列の末尾に新しい要素を追加する|
|popメソッド|配列の最後の要素を取り出す|

### 正規表現 RegExp()

https://www.sejuku.net/blog/24896

`match`を使って文字列を抽出する方法
`replace`を使って置換を行う方法


### 正規表現　　$ , \d{4}

https://murashun.jp/article/programming/regular-expression.html

https://www.megasoft.co.jp/mifes/seiki/

### .appendRow()

https://tonari-it.com/gas-array-push-append/

Sheetオブジェクトの`appendRow`メソッドは __引数__ で与えた一次元配列を、シートの __最終行の次の行のデータとして追加する__ ことができる。

### for

https://tonari-it.com/gas-for/

### for (var i = 0; i < arr.length; i++)

https://www.tohoho-web.com/js/array.htm

配列のループ 項目参照

### i++  

https://auto-worker.com/blog/?p=2943


### .next()/ .hasNext()

https://www.tuyano.com/index3?id=1166003

`.getFiles()`・`.getFolders()`のメソッドで、すべてのファイル／フォルダを取得できる。
返値は配列などではなく、`FileIterator`・`FolderIterator`といったオブジェクト。
これは __イテレーター__ と呼ばれる機能を提供するオブジェクト。
イテレーターというのは、配列のようにたくさんのオブジェクトをまとめ、そこから１つずつ順番に値を取り出していくための仕組み。

`FileIterator`・`FolderIterator`のオブジェクトには、以下のようなメソッドが要されており、これらを使って順にオブジェクトを取り出していくことができる。

__ファイル／フォルダを取り出す__
```
変数 = 《イテレーター》.next();
```
nextを呼び出す度に順番にオブジェクトが取り出されていく。すべて取り出し終えた後、更にnextを呼ぶと`null`になる。

__ファイル／フォルダが残っているか調べる__
```
変数 = 《イテレーター》.hasNext();
```
nextで取り出せるオブジェクトが残っているかどうかを調べる。返値がtrueならば残っており、falseならばすべて取り出し終えたことを示す。


### file.hasnext()

次のファイルがあれば`true`を返す。
while構文を組み合わせてファイル数分のループ処理を実行できる。

```
while(files.hasNext()){
    
    let file = files.next();
}
```


https://tetsuooo.net/gas/42/



### .getFolders()　/ .getFiles()

https://qiita.com/usayuki/items/6d479ddd9cbdc224d81a

子フォルダは、指定したフォルダに対して`getFolders`で取得。getFoldersの　__戻り値__ は`FolderIterator`

ファイルは、指定したフォルダに対して`getFiles`で取得。getFilesの __戻り値__ は`FileIterator`

`getFolders`、 `getFiles` で得られるのは `Iterator` なので、何か操作したい場合は `hasnext` や `next` を用いる

#### Iterator とは？

https://e-words.jp/w/%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF.html

https://okwave.jp/qa/q6940203.html

https://jp.quora.com/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A7%E3%82%88%E3%81%8F%E5%87%BA%E3%81%A6%E3%81%8F%E3%82%8B%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%AF%E9%85%8D%E5%88%97


### .getFolderById(ID) / .getFileById(ID)

https://tonari-it.com/gas-google-drive-file-folder-id/

### ファイル情報の取得に使うコード　.get〜

https://tetsuooo.net/gas/42/


__全てのファイルを取得するメソッド__

`.getFiles()`

__ID・ファイル名・ファイルタイプを指定するメソッド__

|メソッド | 説明 |
|-- |-- |
|getFolderById(ID) | 指定されたIDを持つフォルダー |
|getFilesByType([MIMEタイプ])	| 指定されたMIMEタイプを持つファイル|
|getFilesByName(name) | 指定された名前を持つファイル |
|getFoldersByName(name)	| 指定された名前を持つすべてのフォルダー |

__取得したファイルから情報を得るメソッド__

|メソッド | 説明 |
|--|--|
|getDateCreated() |	Folder作成された日付 |
|getDescription() | ファイルの説明 |
|getEditors() | 編集者のリスト |
|getFolders() |現在のフォルダー内にあるフォルダー |
|getSize() | ファイルのサイズ |
|getLastUpdated()|ファイルが最後に更新された日付|
|getParents() | 親フォルダのコレクション|
|getName()| ファイル名|
|getId() | ファイルのid|
|getUrl() |ファイルのURL|

#### Googleドライブ上のフォルダやファイルを取得するメソッド（サンプルコード）

https://for-dummies.net/gas-noobs/how-to-get-files-and-folders-in-drives-by-gas/#getFiles

__Googleドライブ上のフォルダやファイルを取得するサンプルコード__

|コード | 取得するもの |
| -- | -- |
|getFolderById(id)　　|　フォルダIDで指定したフォルダ|
|getFolders() | 対象フォルダ内のフォルダすべて |
|getFoldersByName(name)　|　対象フォルダ内の指定したフォルダ名に一致するフォルダすべて |
|getRootFolder()　　| マイドライブを取得 |
|getTrashedFolders() | ゴミ箱に捨てられたフォルダ |
|searchFolders(params) | 検索クエリに合致するフォルダすべて |
|getFileById(id) | ファイルIDで指定したファイル |
|getFiles() | 対象フォルダ内のファイルすべて |
|getFilesByName(name) |　対象フォルダ内の指定したファイル名に一致するファイルすべて  |
|getFilesByType(mimeType) | 対象フォルダ内の指定したファイルタイプに一致するファイルすべて |
|getTrashedFiles() | ゴミ箱に捨てられたファイル |
|searchFiles(params) | 検索クエリに合致するファイルすべて |



### getLastColumn()

http://www.bmoo.net/archives/2012/03/313122.html

### .create

https://for-dummies.net/gas-noobs/how-to-create-files-and-sheets-for-spreadsheets-by-gas/

### .concat

https://www.sejuku.net/blog/19552

https://techacademy.jp/magazine/27358

### Drive.Files.insert

https://note.com/mangapostjapan/n/n8e736fae0cb8

https://qiita.com/nazomikan/items/4fcf3bbd1b73162575f0


### getLastRow

https://excel-ubara.com/apps_script1/GAS008.html

### getRange()

https://atmarkit.itmedia.co.jp/ait/articles/1809/10/news003_3.html

https://xn--t8j3bz04sl3w.xyz/google-apps-script/getrange/3487/

セル範囲を取得する

|方法 | 戻り値の型 | 簡単な説明 |
| -- | -- | -- |
|getRange(row, column) | Range| 左上のセルが指定された座標にある範囲を返します |
|getRange(row, column, numRows)|Range | 左上のセルが指定された座標で、指定された行数で範囲を返します。|
|getRange(row, column, numRows, numColumns) | Range |与えられた行数と列数を持つ、指定された座標の左上のセルを持つ範囲を返します。|
|getRange(a1Notation) |	Range |	A1表記またはR1C1表記で指定された範囲を返します。|

### getValue

https://auto-worker.com/blog/?p=655#

### insertSheet

https://caymezon.com/gas-sheet-ins-cp-mv-del/

### .length

https://www.sejuku.net/blog/22120

https://auto-worker.com/blog/?p=3894

### open(file)

https://for-dummies.net/gas-noobs/how-to-open-spreadsheet-files-by-gas/

### .push()

https://tonari-it.com/gas-array-push-append/

https://moripro.net/gas-array-method/

配列の最後に要素を追加する場合は、Arrayオブジェクトに対するpushメソッドを使う　。

### return文

https://wp-p.info/tpl_rep.php?cat=js-intermediate&fl=r7

https://www.javadrive.jp/javascript/function/index4.html

関数(メソッド)が実行されたときにどの値を返すか指定すると同時にその関数の処理も終了させることができる。
この終了処理を応用して、 __『要素が見つからなかった場合は処理を終了(エスケープ)させる』__ といった処理を構築することができる。
注意点：『return文』は __関数(メソッド)の中でしか__ 書くことができない。

### setValue

https://auto-worker.com/blog/?p=655#

https://iwb.jp/google-apps-script-for-setvalues/


### sort()

https://spread-sheets.com/function/filter/sort-function/

https://xn--t8j3bz04sl3w.xyz/google-apps-script/sort/3823/

### StartRow プロパティ

https://docs.grapecity.com/help/multirow-winforms-8/GrapeCity.Win.MultiRow.v80~GrapeCity.Win.MultiRow.HeaderDropDownList~StartRow.html#:~:text=%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E3%82%BB%E3%83%AB%E3%81%AE%E6%9C%80%E5%88%9D%E3%81%AE%E8%A1%8C%E3%80%82

対応するセルの最初の行。既定値は0。


#### 関数の構文

方法1

```
SORT(範囲,並び替える列,昇順,並び替える列2,昇順2･･･)
```
方法２

昇順にsortするには、並び替える範囲を指定した後に

```
範囲.sort(1);
```

### Googleドライブの指定フォルダにスプレッドシートを新規作成する

https://moripro.net/gas-create-new-spreadsheet/

### 特定列の最終行・特定行の最終列を取得する方法

https://moripro.net/gas-get-specified-lastcol-lastrow/

### var exports = exports typescript

https://dev.classmethod.jp/articles/ts2gas/

```hoge.gs
var exports = exports || {};
var module = module || { exports: exports };
exports.Hoge（ファイル名） = void 0;
```

### void 0

https://www.sejuku.net/blog/28461

https://liginc.co.jp/web/js/38494

### 複数のスプレッドシートの値とノートを1つのシートにまとめたい（シート1）

https://www.pre-practice.net/2019/06/11.html

### appsscript.json マニフェスト

https://qiita.com/tanaike/items/b3538e7550555ebb51f5