Javascript 当使用Google Apps脚本填充某个单元格时,如何自动填充当前时间和日期

Javascript 当使用Google Apps脚本填充某个单元格时,如何自动填充当前时间和日期,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我希望日期和时间填充在两个不同的单元格中,当它旁边的列中的单元格填充“是”时。其想法是创建一个结账时间和日期 脚本的上半部分是签入,下半部分是签出,但目前它只是用于签出时间,但签出时间不起作用。有什么建议吗 function onEdit(event) { var timezone = "GMT+1"; var timestamp_format = "hh:mm:ss"; // Timestamp Format. var timestamp_formatT = "dd-MM-yyyy

我希望日期和时间填充在两个不同的单元格中,当它旁边的列中的单元格填充“是”时。其想法是创建一个结账时间和日期

脚本的上半部分是签入,下半部分是签出,但目前它只是用于签出时间,但签出时间不起作用。有什么建议吗

function onEdit(event) {
  var timezone = "GMT+1";
  var timestamp_format = "hh:mm:ss"; // Timestamp Format.
  var timestamp_formatT = "dd-MM-yyyy";
  var updateColName = "Student Name";
  var timeStampColName = "Time Out";
  var sheet = event.source.getSheetByName('2019/20'); 
  var actRng = event.source.getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol = headers[0].indexOf(timeStampColName);
  var updateCol = headers[0].indexOf(updateColName); 
  updateCol = updateCol + 1;
  if (dateCol > -1 && index > 1 && editColumn == updateCol) {
    var cell = sheet.getRange(index, dateCol + 1);
    var cellT = sheet.getRange(index, dateCol + 2);
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
    var dateT = Utilities.formatDate(new Date(), timezone, timestamp_formatT);
    cell.setValue(date);
    cellT.setValue(dateT);  
  } 
  var updateColName2 = "Check In";
  var timeStampColName2 = "Time In";
  var actRng2 = event.source.getActiveRange();
  var editColumn2 = actRng2.getColumn();
  var index2 = actRng2.getRowIndex();
  var headers2 = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol2 = headers2[0].indexOf(timeStampColName2);
  var updateCol2 = headers2[0].indexOf(updateColName2); 
  updateCol2 = updateCol2 + 1;
  if (dateCol2 > -1 && index2 > 1 && editColumn2 == updateCol2) {
    var cell2 = sheet.getRange(index2, dateCol2 + 1);
    var date2 = Utilities.formatDate(new Date(), timezone, timestamp_format);  
    cell2.setValue(date2);      
  } 
}
下面表格的屏幕截图(如果有帮助)


因为一个很小的细节,它不起作用。列标题称为Check-IN,在脚本中,您正在查找一个名为Check-IN的标题。因此,您只需更改以下内容:

var updateColName2 = "Check In";
if (dateCol2 > -1 && index2 > 1 && editColumn2 == updateCol2) {
为此:

var updateColName2 = "Check IN";
此外,如果希望仅在值签入列为“是”时填充“时间”列和“日期”列,则应添加新条件,以便可以更改此条件:

var updateColName2 = "Check In";
if (dateCol2 > -1 && index2 > 1 && editColumn2 == updateCol2) {
致:

最后,您不需要定义headers2变量,它与headers相同

编辑 此外,还应在最后一个if块内添加此行:

因此,完整的代码可能如下所示:

function onEdit(event) {
  var timezone = "GMT+1";
  var timestamp_format = "hh:mm:ss"; // Timestamp Format.
  var timestamp_formatT = "dd-MM-yyyy";    
  var updateColName = "Student Name";
  var timeStampColName = "Time Out";
  var sheet = event.source.getSheetByName('2019/20'); 
  var actRng = event.source.getActiveRange();
  var editColumn = actRng.getColumn();
  var index = actRng.getRowIndex();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var dateCol = headers[0].indexOf(timeStampColName);
  var updateCol = headers[0].indexOf(updateColName); 
  updateCol = updateCol + 1;
  if (dateCol > -1 && index > 1 && editColumn == updateCol) {
    var cell = sheet.getRange(index, dateCol + 1);
    var cellT = sheet.getRange(index, dateCol + 2);
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
    var dateT = Utilities.formatDate(new Date(), timezone, timestamp_formatT);
    cell.setValue(date);
    cellT.setValue(dateT);  
  }     
  var updateColName2 = "Check IN";
  var timeStampColName2 = "Time In";
  var actRng2 = event.source.getActiveRange();
  var editColumn2 = actRng2.getColumn();
  var index2 = actRng2.getRowIndex();
  var dateCol2 = headers[0].indexOf(timeStampColName2);
  var updateCol2 = headers[0].indexOf(updateColName2); 
  updateCol2 = updateCol2 + 1;
  var editedValue = actRng2.getValue();
  if (dateCol2 > -1 && index2 > 1 && editColumn2 == updateCol2 && editedValue == "Yes") {
    var cell2 = sheet.getRange(index2, dateCol2 + 1);
    var cell2T = sheet.getRange(index2, dateCol2 + 2);
    var date2 = Utilities.formatDate(new Date(), timezone, timestamp_format); 
    var date2T = Utilities.formatDate(new Date(), timezone, timestamp_formatT);
    cell2.setValue(date2);
    cell2T.setValue(date2T);
  } 
}

我希望这对您有所帮助。

谢谢!时间在流逝。真是愚蠢的错误。但是我对我的生日感到困惑。我是否将'if dateCol2>-1&&index2>1&&editColumn2==updateCol2{'更改为'var editedValue=actRng2.getValue;if dateCol2>-1&&index2>1&&editColumn2==updateCol2&&editedValue==Yes{.我的脚本应该是什么样子的?我对我的回答做了一些编辑,希望现在你能更清楚一些。基本上,actRng2.getValue==Yes检查编辑后的值是否等于Yes,因此只有在这种情况下才会添加日期和时间。另外,请记住,如果你的问题得到解决,你可以通过接受提供解决方案;不幸的是,这仍然不起作用。时间正在填充,但日期不是。抱歉,我忘了告诉您必须在最后一个if块中添加的一行。用此编辑了我的响应,并添加了完整代码。希望这最终对您有效。