设置单元格中包含特定文本的日期

时间:2019-06-04 13:41:22

标签: google-apps-script google-sheets

我有一个脚本,它将在第4列中的单元格具有文本“ Assign”时将日期和时间写入第14列。我现在面临的问题是,当我不直接在第4列中输入“分配”时,第14列将不会更改。

例如:我告诉电子表格第4列的单元格4 = I4,并且在I4中有文本“分配”,第14列将不显示当前日期时间。

当我手动将第4列的单元格4设置为“分配”时,第14列将显示日期时间。

脚本在onEdit上有效,这可能是问题吗?我是Google Apps脚本的新手。

function onEdit(e) {
  var sh =  e.source.getActiveSheet();
  var col = e.range.getColumn();
  var val = e.range.getValue();

  //check if sheet is 'Blad1', column edited is 'C' & value is 'assign'
  if (sh.getSheetName() === 'Blad1' && col === 4 && val === 'Assign') {
    var row = e.range.getRow();
    var tz = e.source.getSpreadsheetTimeZone();
    var date = Utilities.formatDate(new Date(), tz, 'dd-MM-yyyy     hh:mm:ss');

    //set date in column 14 for same row
    sh.getRange(row, 14).setValue(date);

  }
}

仅当我将文本直接放在第4列中时,脚本才起作用。我希望每当第4列中的单元格更改为“分配”时,脚本就起作用。

P.S。电子表格将从名为“应用程序表”的程序中获取新数据。当应用表格将第4列更改为“分配”时,我需要显示当前时间。

1 个答案:

答案 0 :(得分:0)

此脚本仅在更新第4列时才执行setValue(),这是if语句专门检查的事情之一:

if (sh.getSheetName() === 'Blad1' && col === 4 && val === 'Assign') {

如果您希望每次编辑工作表并val === 'Assign'都运行此操作,那么您要做的就是从if语句中删除列检查,并使用{{ 1}},而不是事件对象val

getRange()