GASのonEditトリガー
前回までは石を置く動作を関数として作成しました。
今回はその関数を、シート上の操作によって呼び出すという部分を実装します。
そのためにGASに用意されている、シンプルトリガーというものを使ってみます。
試しに、AppsScriptに新しいスクリプトを用意し、次のようにコードを入れてみます。
function onEdit() {
Browser.msgBox('テスト');
}
この状態でシートを適当に編集すると、次のように表示されます。
onSelectionChangeトリガー
このように、GASには一定の動作をベースに動くように用意されたトリガーがいくつか存在します。
ただ、onEditだと、石を置く動作として「1」と入力しなければなりません。
また、setStoneによってほかのセルが編集されると、さらにそれをトリガーにonEditが動いてしまいます。
そこで今回は、onSelectionChangeというトリガーを使用します。
ただこのトリガーはやや不安定で、一度保存しても動かないことがあります。
そういった場合はスプレッドシートを閉じてもう一度開いたり、といった作業を行うことで動くようになることがあります。
実装してみる
実際に動くようになれば、onSelectionChangeをベースにsetStoneを呼び出すようにしてあげればOKです。
function onSelectionChange(e){
if (e.range.getRow() <= 8, e.range.getColumn() <= 8){
setStone(e.range.getRow(), e.range.getColumn(), 1);
}
}
function setStone(c, r, s){
var flag = false
if (sheet.getRange(c, r).getValue() == 0) {
for (let i = -1; i <= 1; i++){
for (let j = -1; j <= 1; j++){
if (sheet.getRange(c + i, r + j).getValue() == -1 * s){
for (let k = 2; k <= 8 ; k ++){
if (c + i * k < 1) continue;
if (r + j * k < 1) continue;
if (sheet.getRange(c + i * k, r + j * k).getValue() == s){
for (let l = 0; l < k ; l ++){
sheet.getRange(c + i * l, r + j * l).setValue(s)
}
}
}
}
}
}
}
}
このコードだと、「1」の石を置くことしかできませんが、実際に「1」とおきたいところでセルを選択すると、setStoneが呼び出され、石が置かれるようになります。
コメント