Как автоматически заполнить текущее время и дату при заполнении определенной ячейки с помощью скрипта Google Apps - PullRequest
1 голос
/ 14 октября 2019

Я бы хотел, чтобы дата и время заполнялись в двух разных ячейках, когда ячейка в столбце рядом с ней заполнена значением «Да». Идея состоит в том, чтобы создать время и дату оформления заказа.

Верхняя часть скрипта - это проверка, а нижняя - проверка, однако в настоящее время это только время проверки, но время проверки нене работаетЛюбой совет?

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);      
  } 
}

Снимок экрана листа ниже, если это поможет.

enter image description here

1 Ответ

1 голос
/ 14 октября 2019

Не работает из-за очень маленькой детали. Заголовок столбца называется Check IN, а в сценарии вы ищете тот, который называется Check In. Так что вам просто нужно изменить это:

var updateColName2 = "Check In";

На это:

var updateColName2 = "Check IN";

Кроме того, если вы хотите, чтобы столбцы Time In и Date In заполнялись только тогда, когда значениеCheck IN столбец равен Yes, вы должны добавить новое условие, чтобы вы могли изменить это:

if (dateCol2 > -1 && index2 > 1 && editColumn2 == updateCol2) {

На:

if (dateCol2 > -1 && index2 > 1 && editColumn2 == updateCol2 && actRng2.getValue() == "Yes") {

Наконец, вам не нужноопределить переменную headers2, это то же самое, что и headers.

EDIT

Кроме того, вы должны добавить эту строку внутри последнего блока if:

var date2T = Utilities.formatDate(new Date(), timezone, timestamp_formatT);
cell2T.setValue(date2T);

Итак, полный код может выглядеть так:

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);
  } 
}

Надеюсь, это вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...