Apps Script IF columns are filled THEN timestamp, IF columns are Empty 然后 CLEAR

Apps Script IF columns are filled THEN timestamp, IF columns are Empty then CLEAR

我有 A 列,它应该保留时间。如果在 B 到 G 列中输入了任何数据,则应在 A 列中输入时间戳,然后保持静态。如果这些列中的所有数据(B 列到 G 列为空),则 A 中的时间戳(如果存在)应该清除。

目前我的脚本正在运行,除了清除 A 列中的行。我知道我可能遗漏了一些愚蠢的东西,但我做错了!

function  checkinTimeStamp(e){
  var s = SpreadsheetApp.getActive();
  var range = e.range;
  var column = range.getColumn();
  if (column == 2 || column == 3 || column == 4 || column == 5 || column == 6 || column == 7){
    var timestamp = Utilities.formatDate(new Date, s.getSpreadsheetTimeZone(), "hh:mm");
    var row = range.getRow();
    var value = e.value || '';
    var sheet = e.source.getActiveSheet();
    if(sheet.getRange(row,1).getValue() ==""){
      if(value !== ""){
      sheet.getRange(row, 1).setValue(timestamp);
    }
    //if(sheet.getRange(row,1).getValue() !==""){
    //  sheet.getRange(row, 1).setValue(currentvalue);
    }
   // else{
      if(sheet.getRange(column == 2 && column == 3 && column == 4 && column == 5 && column == 6 && column == 7).getValue() ==""){
      sheet.getRange(row, 1).setValue('');
    }
  }
}

以你的脚本为例,作为一个简单的修改,下面的修改如何?

发件人:

  if(sheet.getRange(column == 2 && column == 3 && column == 4 && column == 5 && column == 6 && column == 7).getValue() ==""){
  sheet.getRange(row, 1).setValue('');
}

收件人:

if (sheet.getRange(row, 2, 1, 6).getValues()[0].join("") == "") {
  sheet.getRange(row, 1).setValue('');
}
  • 在此修改中,检索行值并将其与 "" 进行比较。这样,当行的“B:G”列为空时,sheet.getRange(row, 1).setValue('')是运行。

嘿,我尝试了一种不同的方法,使用 forEach 循环遍历每一行,首先查看 ColB 是否为空(如果为空,则清除时间戳)然后如果 ColB 中填充了项目,则打印时间戳。我已经分享了 运行 代码前后的图像。

function  checkinTimeStamp(){
  var s = SpreadsheetApp.getActiveSpreadsheet();
  var sheet=s.getSheetByName('Sheet1');
  var data=sheet.getDataRange().getValues();
  var timezone = s.getSpreadsheetTimeZone();
  var timestamp = Utilities.formatDate(new Date(), timezone, "hh:mm");

// Go through each row and if ColB is empty but ColA isn't, clear the timestamp in ColA
  data.forEach(function(row,col){
    if (col == '') return;     //skip row 1 as title
    if (row[0] == '') return;  //skip if ColA is empty
    if (row[1] != '') return   //skip if ColB is NOT empty
    sheet.getRange(col + 1,1).clearContent();
  });

// Go through each row and if ColB is not empty put a timestamp in ColA
  data.forEach(function(row,col){
    if (col == '') return;    //skip row 1 as title
    if (row[1]== '') return; //skip if ColB is empty
    sheet.getRange(col + 1,1).setValue(timestamp);
  });
}

Before Running Code

After Running Code

我的样本 sheet 在这里:https://docs.google.com/spreadsheets/d/1IrEG_YNoUnesg78CDjlEwsVqssElZZ8znciqJC63D1Y/edit#gid=0