Google脚本在同一行,不同单元格中选择了特定值时,仅在单元格中插入一次当前日期

时间:2018-11-01 22:46:54

标签: google-apps-script

我正在编写给我带来麻烦的脚本。列G具有选择列表值M1,M2,M3,S1,S2,S3,S4,S5,C1,C2,C3。当我从选择列表中选择任何S值(S1,S2,S3,S4,S5)时,我希望在t列中插入一个时间戳。我希望仅在第一次出现时执行此操作,而不希望在随后更新或更改g列中的选择列表值时执行此操作。

我已经关闭,但是当前脚本会更新整个t列中的日期。

如果可能的话,我也想清理第9行。

到目前为止,我已经拥有了:

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('ClientList');
  var stageValues = s.getRange('g3:g').getValues();
  var dateValues = s.getRange('t3:t').getValues();

  for (var row in stageValues) 
    for (var col in stageValues[row])
      if (stageValues[row][col] == 'S1' || stageValues[row][col] == 'S2' || stageValues[row][col] == 'S3' || stageValues[row][col] == 'S4' || stageValues[row][col] == 'S5' && dateValues[row][col] == '') {
        num = parseInt(row) + 3;
        s.getRange('t' + num).setValue(new Date());
        }
  };

1 个答案:

答案 0 :(得分:0)

您说的是选择列表值,我假设您的意思是一个下拉列表。但是不管这是否可行。每当在G列中手动编辑单元格时,onEdit触发器都会检查“ S”值和T列中的时间戳。如果找不到时间戳,它将放置一个新的时间戳。 “ e”是触发对象,其中包含有关已编辑单元格的信息。

function onEdit(e) {
  try {
    if( e.range.getSheet().getName() === "ClientList" ) {
      if( e.range.getColumn() === 7 ) {  // edit in column G
        if( e.value.charAt(0) === "S" ) {
          if( e.range.offset(0,13,1,1).getValue() === "" ) {  // no value in T
            e.range.offset(0,13,1,1).setValue(new Date());
          }
        }
      }
    }
  }
  catch(err) {
    Logger.log(err);
  }
}