Google Sheets Автоматическая дата и отметка времени на нескольких столбцах - PullRequest
0 голосов
/ 11 июня 2018

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

  • Если столбец «Заголовок» отредактирован / обновлен ->, то в поле даты добавляется метка даты (мм-дд-гг)Столбец «Дата»;
  • Если столбец «Заголовок» отредактирован / обновлен ->, то в столбец «Время начала» вставляется метка времени (чч: мм);и
  • Если столбец «Описание» редактируется / обновляется ->, то в столбец «TimeStop» вставляется метка времени (чч: мм).

Я уже добавил именованные диапазоны для столбцов от A до E следующим образом:

  • Столбец A = Заголовок
  • Столбец B = Описание
  • Столбец C = Дата
  • Столбец D = TimeStart
  • Столбец E = TimeStop.

Я нашел код, который позволяет мне делать метку даты / метки времени,но он работает только для одного столбца (с https://www.internetgeeks.org/tech/add-timestamp-time-stamp-google-docs-spreadsheet/):

function onEdit(event)
{ 
  var timezone = "PST";
  var timestamp_format = "MM-dd-yy";
  var updateColName = "Title";
  var timeStampColName = "Date";
  var sheet = event.source.getSheetByName('Sheet1');

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

Я пытался копировать и вставлять этот же код снова и снова и просто изменить значения updateColName, timeStampColName иtimestamp_format переменных.

И, как я выяснил, вы не можете просто скопировать и вставить несколько onEdit функций и ожидать, что они будут выполняться в одном документе.

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

Вот ссылка намой Google Sheet: https://docs.google.com/spreadsheets/d/1_dW8erkzVJFT6aUiB-0SikeMTbCnXmoo3d5mgUBN910/edit?usp=sharing

1 Ответ

0 голосов
/ 11 июня 2018

Основная проблема заключается в том, что вам нужна функция поиска изменений в трех местах.Ваш текущий код ищет только изменения в столбце «Заголовок».Я добавил код для поиска других мест.

function onEdit(event)
{ 
  var timezone = "PST";
  var datestamp_format = "MM-dd-yy";
  var updateColName = "Title";
  var dateStampColName = "Date";
  var startEditColName = "TimeStart"; // edit column to signal time start
  var startTimeColName = "TimeStart";
  var stopEditColName = "TimeStop";  // edit column to signal time stop
  var stopTimeColName = "TimeStop";
  var sheet = event.source.getSheetByName('Sheet1');


  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(dateStampColName);
  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, datestamp_format);
    cell.setValue(date);
  }

  var startCol = headers[0].indexOf(startTimeColName);
  var startEditCol = headers[0].indexOf(startEditColName); startEditCol = startEditCol+1;
  if (startCol > -1 && index > 1 && editColumn == startEditCol) { 
    var cell1 = sheet.getRange(index, startCol + 1);
    var date = new Date();
    var startTime = date.toTimeString();
    cell1.setValue(startTime);
  }

    var stopCol = headers[0].indexOf(stopTimeColName);
  var stopEditCol = headers[0].indexOf(stopEditColName); stopEditCol = stopEditCol+1;
  if (stopCol > -1 && index > 1 && editColumn == stopEditCol) { 
    var cell2 = sheet.getRange(index, stopCol + 1);
    var date = new Date();
    var stopTime = date.toTimeString();
    cell2.setValue(stopTime);
  }
}

Я также добавил это к вашему файлу скрипта TimeStamp в виде отдельного скрипта - Date_Timestamp.gs, чтобы вы могли увидеть функциональность.

любым способом, но он делает то, что вы просили.Дайте мне знать, если вам нужно больше объяснений или я не ответил на ваш вопрос.

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