

こんにちは。

[code]

    function onEdit(e){
      var SHEET_ = e.source.getSheetByName("rireki");
      SHEET_.appendRow([e.oldValue]);
    }
[/code]

スクリプト実行時にoldValueの値を見る事で、  
スプレッドシートのセルの値を編集した時に、  
編集する前はどのような値だったのかを"rireki"シートに残したいです。

セルの値を編集した時は、oldValueが期待した通りに記録されますが、  
セルの値を[delete]ボタンで削除すると、oldValueはundefinedになってしまいます。

セルの値を[delete]ボタンで削除した際にも、deleteする前の値を知りたいのですが、  
それはどのようにすればいいのでしょうか。

簡潔ではありますが、質問は以上になります。

\---- 追記 ----

Tanaike様から、教えていただいたページを参考に、  
試してみたコードで、一応自分のやりたい事は可能になりました。

以下のコードになります。

[code]

    function onEdit(e){
      var SHEET = e.source.getActiveSheet();
      var SHEET_NAME = SHEET.getName()
      var RANGE = SHEET.getActiveRange();
      var VALUE = RANGE.getValue();
      var COL = RANGE.getColumn();
      var ROW = RANGE.getRow();
    
    
      var LOG_SHEET_NAME = "rireki";
      var LOG_SHEET = e.source.getSheetByName(LOG_SHEET_NAME) || e.source.insertSheet(LOG_SHEET_NAME);
      var _LOG_DATA = LOG_SHEET.getDataRange().getValues();
    
      Logger.log(_LOG_DATA);
      var LOG_INDEX = (_LOG_DATA.findIndex(function(x){return (x[0] == SHEET_NAME) && (x[1] == ROW) && (x[2] == COL)})) + 1;
    
      if( LOG_INDEX >= 1){
        LOG_SHEET.getRange(LOG_INDEX,5).setValue(_LOG_DATA[LOG_INDEX - 1][3]);
    
    
        if(typeof e.value === 'string'){
          LOG_SHEET.getRange(LOG_INDEX ,4).setValue(e.value);
        }else if(typeof e.value === 'object'){
          LOG_SHEET.getRange(LOG_INDEX ,4).setValue("");
        }
        else if(typeof e.value === 'undefined'){
          LOG_SHEET.getRange(LOG_INDEX ,4).setValue("");
        }else{
        }
    
      }else{
        LOG_SHEET.insertRowBefore(1);
        LOG_SHEET.getRange(1,1,1,5).setNumberFormats([["@","@","@","@","@"]]).setValues([[SHEET_NAME,ROW,COL,VALUE,""]]);
        LOG_INDEX = 1;
      }
      //LOG変更、終了。
    
      e.oldValue = LOG_SHEET.getRange(LOG_INDEX , 5).getValue();
    
      //以下、やりたい事。
    }
    
    if (!Array.prototype.findIndex) {
      Array.prototype.findIndex = function(predicate) {
        if (this === null) {
          throw new TypeError('Array.prototype.findIndex called on null or undefined');
        }
        if (typeof predicate !== 'function') {
          throw new TypeError('predicate must be a function');
        }
        var list = Object(this);
        var length = list.length >>> 0;
        var thisArg = arguments[1];
        var value;
    
        for (var i = 0; i < length; i++) {
          value = list[i];
          if (predicate.call(thisArg, value, i, list)) {
            return i;
          }
        }
        return -1;
      };
    }
    
[/code]


CC BY-SA 4.0
2019-07-06T08:51:09.017
56451
2019-07-08T10:49:54.743
2019-07-08T10:49:54.743
35004
35004
question
google-apps-script
google-apps-script spreadsheetでセルの値を[Delete]ボタンで削除した際にも、oldValueを知りたいです。