Как отметить более одной ячейки в Google Sheets? - PullRequest
0 голосов
/ 24 мая 2019

В моем документе на листе Gooogle на данный момент есть 4 ячейки, которые регулярно обновляются.Каждый раз, когда они обновляются, я хочу поставить отметку времени в отдельной ячейке.

Я могу заставить прикрепленный скрипт работать на 1 ячейку, но когда я дублирую скрипт, чтобы он работал на другую ячейку, он останавливает работу предыдущей.

function onEdit(event)
{ 
  var timezone = "GMT+1";
  var timestamp_format = "dd-MM-yyyy hh:mm:ss"; 
  var updateColName = "Development Team Comments";
  var timeStampColName = "To update select cell";
  var sheet = event.source.getSheetByName('WIP'); 


  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 date = Utilities.formatDate(new Date(), timezone, timestamp_format);
    cell.setValue(date);
  }
}

Я также пробовал этот код, который, кажется, не работает для последующих ячеек:

function onEdit(event)
{ 
  var timezone = "GMT+1";
  var timestamp_format = "dd-MM-yyyy hh:mm:ss"; // Timestamp Format. 
  var updateColName = "Development Team Comments";
  var timeStampColName = "To update select cell";
  var sheet = event.source.getSheetByName('WIP'); //Name of the sheet where you want to run this script.

  var responseArray = ["o update select cell", "Bupa time stamp","Date Stamp Move Live"];
  var questionArray = ["Development Team Comments", "BDC proofing comments", "Approved Y"];


  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) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
    var cell = sheet.getRange(index, dateCol + 1);
    var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
    cell.setValue(date);
  }
}

То, что я ожидаю, я должен быть в состоянии сделать, это иметь возможностьобновите любые ячейки и предоставьте им текущее время, как в приведенном выше сценарии.Нужно ли мне дублировать это или есть способ вставки в ссылки на ячейки.

1 Ответ

1 голос
/ 24 мая 2019

Похоже, что ваш скрипт довольно сложен для того, что вам действительно нужно, он проверяет все заголовки и т. Д., Когда на самом деле все, что вам нужно, это несколько setValue() на основе if операторов, бросьте это внутри триггера onEdit(e) и все готово!

function onEdit(e) {
  var sheet = e.source.getSheetByName('WIP');
  var timezone = 'GMT+1';
  var format = 'dd-MM-yyyy hh:mm:ss';

  var cell = e.range;
  var row = cell.getRow();
  var col = cell.getColumn();

  var stamp = Utilities.formatDate(new Date(), timezone, format);

  if (col === 1) {                          //if edited cell is in column A
    sheet.getRange(row, 4).setValue(stamp); //set timestamp in column D
  }
  if (col === 2) {                          //if edited cell is in column B
    sheet.getRange(row, 5).setValue(stamp); //set timestamp in column E    
  }
  if (col === 3) {                          //if edited cell is in column C
    sheet.getRange(row, 6).setValue(stamp); //set timestamp in column F
  }
}

Этот скрипт будет работать до столбца C, если вы хотите добавить больше, вы можете просто настроить числа в операторах if и getRange() в соответствии с вашими требованиями.

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