HTML Serviceでサイドバーを作成してそのUI上で値の読み書きをしてみます
このサイドバー上でできること
- 読み込むボタンを押したら
- 選択されているセルの行数を取得する
- B列の値を読み込む
- 2つめのテキストエリアにテキストを入力したら
- C列にその値を入力する
コード.gs
var LOAD_COL = 2; var INPUT_COL = 3; function onOpen() { SpreadsheetApp.getUi() .createMenu("SCRIPT") .addItem("サイドバーを開く", "openSidebar") .addToUi(); } function openSidebar() { var html = HtmlService.createHtmlOutputFromFile("index") .setTitle("Input App"); SpreadsheetApp.getUi().showSidebar(html); } function get_value_gs() { var sh = SpreadsheetApp.getActiveSheet(); var row = sh.getActiveRange().getRow(); var LOAD_COL_value = sh.getRange(row, LOAD_COL).getValue(); var results = [row, LOAD_COL_value,]; return results; } function set_value_gs(values) { var row = values[0]; var value = values[1]; var sh = SpreadsheetApp.getActiveSheet(); var range = sh.getRange(row, INPUT_COL); range.setValue(value); } |
意訳LOAD_COLに2を入れる INPUT_COLに3を入れる スプレッドシートが開いた時に実行する スプレッドシートのUIを取得して メニューに SCRIPT を作って "サイドバーを開く" 項目を追加して openSidebar の機能を割り当てて UIに追加する この機能がやること 指定したHTMLファイルを表示して タイトルを Input App にして スプレッドシートのUIを取得してサイドバーに表示する この機能がやること アクティブシートを取得して 選択されているセルの行番号を取得して その行のLOAD_COL行目(2行目)の値を取得して 行数と値を配列に入れて 返す この機能がやること 受け取ったvaluesの0番目(行数が入っている)を取得して 受け取ったvaluesの1番目(値が入っている)を取得して アクティブシートを取得して 受け取った行のINPUT_COL列に 受け取った値を入力する |
index.html
<!DOCTYPE html> <html> <head> <style> textarea { width: 80vw; height: 10vh; } </style> </head> <body> <label for="row">row</label> <input type="text" id="row"><br> <label for="load_col_value">load_col_value</label> <textarea id="load_col_value"></textarea><br> <label for="input_col_value">input_col_value</label> <textarea id="input_col_value"></textarea><br> <button type="button" id="bt">読み込む</button><br> </body> <script> document.getElementById("bt").onclick = get_value; document.getElementById("input_col_value").onkeyup = set_input_col_value; function get_value() { google.script.run .withFailureHandler(onFailure) .withSuccessHandler(onSuccess) .get_value_gs(); } function onSuccess(results) { var row = results[0]; var load_col_value = results[1]; document.getElementById("load_col_value").value = load_col_value; document.getElementById("row").value = row; } function onFailure(e) { alert([e.message, e.stack]); } function set_input_col_value() { var row = document.getElementById("row").value; var value = document.getElementById("input_col_value").value; var values = [row, value]; google.script.run.set_value_gs(values); } </script> </html> |
意訳これはHTML5文書です テキストエリアの 幅を表示領域の最大を100とした時の80にする 高さを表示領域の最大を100とした時の10にする idがrowのラベル そのテキストボックス idがload_col_valueのラベル そのテキストエリア idがinput_col_valueのラベル そのテキストエリア idがbtのボタン idがbtの要素がクリックされたらget_valueを実行する idがinput_col_valueの要素でキーが上がったらset_input_col_valueを実行する この機能がやること .gsファイルのスクリプトを実行する 失敗したらonFailureを実行する 成功したらonSuccessを実行する .gsファイルのスクリプトはget_value_gsを実行する この機能がやること resultから行数を取得して 読み込んだ値を取得して idがload_col_valueの要素に値を入力して idがrowの要素に行数を入力する この機能がやること エラーメッセージをアラートに出す この機能がやること idがrowの要素の値を取得して idがinput_col_valueの要素の値を取得して それら配列に入れて .gsファイルのset_value_gsに渡す |
参考
Dialogs and Sidebars in G Suite Documents / Custom sidebars
https://developers.google.com/apps-script/guides/dialogs
Dialogs and Sidebars in G Suite Documents / Custom sidebars
https://developers.google.com/apps-script/guides/dialogs