久しぶりにGASでプロトタイピングしたので、よく使う処理をまとめてみました
アンケートとその集計画面をプロトタイピングする機会があったので、GASで作ってみました。
久しぶりにGASを使ったら全て忘れていたので、せっかくなのでメモとして残しておきたいと思います。
なるべくコピペでそのまま使える様にしてあります。
アクティブなスプレッドシートを取得する
const app = SpreadsheetApp.getActive();
特定のシートを取得する
const sheet = SpreadsheetApp.getActive().getSheetByName("アンケート一覧");
セルに行を追加する
const sheet = SpreadsheetApp.getActive().getSheetByName("アンケート一覧");
const addArray = [questionnaireID, questionnaireName];
sheet.appendRow(addArray);
セルから値を取得する
単体セルの場合
const sheet = SpreadsheetApp.getActive().getSheetByName("プロジェクト一覧");
const value = sheet.getRange('A3').getValue();
Logger.log(value);
複数セルの場合
const sheet = SpreadsheetApp.getActive().getSheetByName("プロジェクト一覧");
const values = sheet.getRange('A3:C4').getValues();
Logger.log(values);
結果は 行 x カラム
の2次元配列になります。
[
[A3セルの値, B3セルの値, C3セルの値],
[A4セルの値, B4セルの値, C4セルの値]
]
B3セルの値
を取り出す時は、values[0][1]
の様にアクセスします。
セルに値を書き込む
const sheet = SpreadsheetApp.getActive().getSheetByName("プロジェクト一覧");
sheet.getRange('A3').setValue('新しい値');
スプレッドシートにスクリプトを実行するボタンを置く
挿入
→ 図形描画
で図形を描画します。
挿入された画像を右クリックしてスクリプトを割り当て
をクリックします
ここで実行したいスクリプトを指定します。
スクリプトを実行する時に、確認ダイアログを出す
スプリクトを実行するボタンを置くと、、なぜか押したくなるんですよね。
スクリプトを走らせると、いろんなところに影響が出るので、実行する前にはちゃんと確認ダイアログが出て欲しいです。
function updateSummary() {
var ui = SpreadsheetApp.getUi();
var title = '更新';
var prompt = '更新しますか'
const ok = ui.alert(title, prompt, ui.ButtonSet.YES_NO) === ui.Button.YES;
if (ok) {
_updateSummary()
}
}
後ろに見慣れない === ui.Button.YES;
というものがあります。
これは、ui.alert(title, prompt, ui.ButtonSet.YES_NO)
の戻り値が "YES", "NO" の文字列で返ってくるため、booleanに変換するために行なっています。
これを実行すると、こんなダイアログが出る様になります。
IDの取得
URLのd/
の後ろにあるのがIDとなります。
URLが下記の場合、
https://docs.google.com/spreadsheets/d/1ow3oewrAGcNQHlv2iGG6Buk8AAoJSi4nmJ-AU6CHlA/edit#gid=0
IDは1ow3oewrAGcNQHlv2iGG6Buk8AAoJSi4nmJ-AU6CHlA
になります。
フォルダの場合はfolders/
の後ろがIDになります。
https://drive.google.com/drive/folders/8B6lsdfjo8CklviuM5NGZyRHlJVDA
フォルダを作成する
ルート配下に作る場合
DriveApp.createFolder(name);
特定のフォルダの中に作る場合
const folder = DriveApp.getFolderById("[フォルダID]");
const newFolder = folder.createFolder("[新しいフォルダ名]");
特定のフォルダにスプレッドシートを作成する
const folder = DriveApp.getFolderById("[フォルダID]");
const ss = SpreadsheetApp.create("[ファイル名]");
const sourceFile = DriveApp.getFileById(ss.getId());
const copiedFile = sourceFile.makeCopy(fileName, folder);
DriveApp.getRootFolder().removeFile(originalFile);
特定のフォルダに直接作成するAPIが見つからずでした。
なので、一度ファイルを作ってから移動(コピーして削除)する様にしています。
Googleフォームに回答用スプレッドシートを追加する
const form = FormApp.openById("[フォームID]");
const sheet = createSpreadSheet();
form.setDestination(FormApp.DestinationType.SPREADSHEET, sheet.getId());
return form
画面だとここから設定できるものです。
フォーム・スプレッドシートをID指定して開く
Googleフォーム
const form = FormApp.openById("[フォームID]");
Googleスプレッドシート
const ss = SpreadsheetApp.openById("[スプレッドシートID]");
以下関数です。
リンク
=HYPERLINK("[リンクURL]", "[表示名]")
集計表にアンケートの結果リンクを置くのに使いました。
GASのコードはこんな感じです。
const sheet = SpreadsheetApp.getActive().getSheetByName("集計");
sheet.getRange('B15').setValue('=HYPERLINK("' + qForm.getSummaryUrl() + '","アンケート結果(グラフ)")')
sheet.getRange('B16').setValue('=HYPERLINK("' + qSheet.getUrl() + '","アンケート結果(生データ)")')
他シートのデータを参照する
=IMPORTRANGE("[スプレッドシートのURL]", "[RANGE]")
複数のスプレッドシートのデータを参照して1つのスプレッドシートにまとめる必要がありました。
頑張れば他のスプレッドシートを直接参照できたかもですが、計算がしやすい様に一度集計用のスプレッドシートに持ってきました。
補足情報
最初色々とググってたのですが、結局ドキュメントにあたるのが一番早かったです。
Googleフォーム
Googleスプレッドシート
Googleドライブ
まとめ
久しぶりにGASを書いてみましたが、エディタも進化していてだいぶ書きやすくなっていました。
GASはプロトタイプが簡単に作れるので結構好きなんですが、触る機会が年に1回くらいなので、いつも忘れてしまって毎回同じことをググっている気がします。
今回は忘れないうちにメモったので、次に作る時にはきっとスタートダッシュできると思います!
Discussion