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块中添加的一行。用此编辑了我的响应,并添加了完整代码。希望这最终对您有效。