Google电子表格自动时间戳记:删除单元格内容时我不需要时间戳记

时间:2019-03-17 20:55:50

标签: google-apps-script google-sheets spreadsheet

当我尝试删除脚本检查的单元格的内容时,脚本将粘贴新的时间戳。我只需要在写入新值时使用脚本,而不必在删除值时使用脚本。

function onEdit() {
  
  var COLUMNTOCHECK = 1;
  var DATETIMELOCATION = [0,1];
  var SHEETNAME = 'STOCKOUT' 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  
  if( sheet.getSheetName() == SHEETNAME ) { 
    var selectedCell = ss.getActiveCell();
    if( selectedCell.getColumn() == COLUMNTOCHECK) { 
      var balance = sheet.getRange("i1").getValue();
      var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
      dateTimeCell.setValue([balance]);
      }
  }

这是一个例子:

当我更新列A和C并尝试删除A,B,C,I时,脚本将运行并将新值粘贴到列B Google Spreadsheet Example

2 个答案:

答案 0 :(得分:1)

此修改如何?从单元格中删除值时,e的事件对象onEdit(e)具有e.value.oldValue。使用此脚本,您的脚本可以编写如下。

修改后的脚本:

function onEdit(e) { // Modified
  if (!e.value.oldValue) { // Added
    var COLUMNTOCHECK = 1;
    var DATETIMELOCATION = [0,1];
    var SHEETNAME = 'STOCKOUT' 
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();

    if( sheet.getSheetName() == SHEETNAME ) { 
      var selectedCell = ss.getActiveCell();
        if( selectedCell.getColumn() == COLUMNTOCHECK) { 
        var balance = sheet.getRange("i1").getValue();
        var dateTimeCell = selectedCell.offset(DATETIMELOCATION[0],DATETIMELOCATION[1]);
        dateTimeCell.setValue([balance]);
      }
    }
  }
}

参考:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。

编辑:

我认为编辑单元格有3种情况。

  1. 将值放入空白单元格。

    • e.value包含在事件对象中。
      • oldValue未包含在e.value中。
    • e.oldValue未包含在事件对象中。
  2. 单元格的现有值被编辑。

    • e.valuee.oldValue包含在事件对象中。
      • oldValue未包含在e.value中。
  3. 该值已从单元格中删除。

    • e.valuee.oldValue包含在事件对象中。
      • oldValue包含在e.value中。

我认为模式3可以用于OP的情况。

答案 1 :(得分:0)

尝试一下:

function onEdit(e) {  
  if( e.range.getSheet().getName()=='STOCKOUT' && e.range.columnStart==1) {
      e.range.offset(0,1).setValue((e.value)?e.range.getSheet().getRange("I1").getValue():'');
  }else{
    return;
  }
}