LoginSignup
1
1

More than 1 year has passed since last update.

【GAS】【html→GAS 値渡す】③webページでテーブルの行削除→同時にスプレッドシートも同じ行削除

Last updated at Posted at 2021-05-29

シリーズ③でございます。

まとめはこちら。
スプレッドシート⇆html 双方向の値受け渡し CRUD(追加更新・削除)処理 (GAS、javascript、jqueryのみ)

過去分

①スプレッドシート(サーバー)→html(クライアント)へ値受け渡し(ロード、テンプレ読み込み時)
②スプレッドシート→htmlに渡した値をテーブル形式に(jquery)

◆前回まで

下記スプシを

スクリーンショット 2021-05-29 14.41.39.png

下記webページに表示しました。

スクリーンショット 2021-05-29 15.47.35.png

◆今回やること

  1. htmlのtableに削除ボタンを配置
  2. 削除ボタンのclickイベント追加、イベント発火時の関数の内容は下3つ
    • クリック時に、ボタン自身の行を取得
    • htmlのtable行削除 1.あらかじめ用意した、スプシ行削除のGAS関数呼び出し→スプレッドシートも同じ行を削除

◆コード

index.htmlでは、下記を行います。

  • 繰り返し処理時に削除ボタン配置
  • クリックイベントのjavascriptを追記

※その他、tableタグにborder=1と、th削除ボタンを追加、

index.html 
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>  
    <table id="tbl" border="1">
      <tr>
        <th>地域</th>
        <th>都道府県</th>
     <th>県庁所在地</th>
     <th>削除ボタン</th>
      </tr>
    </table>    
  </body>
</html>

<script
  src="https://code.jquery.com/jquery-3.6.0.slim.min.js"
  integrity="sha256-u7e5khyithlIdTpu22PHhENmPcRdFiHRjhAuHcs05RI="
  crossorigin="anonymous"></script>

<script>

  window.onload = function(){

    google.script.run.withSuccessHandler(dt=>
    {
      for(let i =0;i<dt.length;i++){
        let $tr = $('<tr></tr>');
        $tr.append($('<td></td>').text(dt[i][0])); 
        $tr.append($('<td></td>').text(dt[i][1])); 
        $tr.append($('<td></td>').text(dt[i][2])); 

        $tr.append($('<button></button>').text('削除').on('click',del));
     //↑tableのtdに削除ボタン配置  
     $('#tbl').append($tr);       
        }     
    }).valsget();
  }  


//-----ここから、削除ボタン追加時のイベント処理の内容を追加----------

  function del(){

    var $rowIdx = $(this).parent()[0].rowIndex;
   //削除ボタンの親要素tr取得 → rowIndexでtrの行取得

    let tru_fal = confirm($rowIdx+"行目を削除しますか");
   //削除のアラート。行数がわかるように一応入れてるだけです。

   //以下、confirmがtrueの処理
    if (tru_fal){

      $(this).closest("tr").remove();  //一番近いtrを取得 → 削除

      google.script.run.rowdel($rowIdx+1); 
    //GAS側のrowdel関数に、行数を引数で渡す → rowdelを実行、スプシ行削除
      //+1はスプレッドシートヘッダー分

      }
  }
</script>

コード.js

function valsget() {
  let ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("テスト");
  let vals = ss.getDataRange().getValues();
  vals.shift();  
  return vals;
}

function doGet(){
  let hotpt = HtmlService.createTemplateFromFile('index').evaluate();
  hotpt.setTitle('CRUDテスト');
  return hotpt;
}

//↓クライアント側で削除ボタンクリック時に呼ばれるGAS関数

function rowdel(rw) {  //rwで行数$rowIndexをindex.htmlから受け取る
  let ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("テスト");
  ss.deleteRows(rw); // ← rwの行を丸々削除
}


実行結果

スクリーンショット 2021-05-29 19.57.13.png

削除ボタンを押すと

スクリーンショット 2021-05-29 19.58.43.png

webページ削除

スクリーンショット 2021-05-29 19.59.35.png

スプレッドシートも削除されてます

スクリーンショット 2021-05-29 20.00.28.png

◆感想

jqueryの近い要素の取得とメソッドチェーンが神がかり的に便利だと思いました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1