Как сделать автоматическую отметку времени в гугл листах? - PullRequest
0 голосов
/ 04 января 2019

У меня есть данные в 6 столбцах, а затем в столбце «Последнее обновление», где я вручную записываю дату последнего изменения в строке.Я уверен, что есть способ автоматизировать это, но не могу заставить его работать.

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

В основном это база данных химических веществ, где каждый столбец является свойством, и мне нужно поставить отметку в последний раз, когда любое из свойств было изменено.Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 04 января 2019

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

Самая важная часть вашего скрипта - вы хотите, чтобы он запускался КАЖДЫЙ раз, когда вы вносите изменения влист в ЛЮБОЙ ячейке.Затем, когда он запускается, вы можете проверить, какая ячейка была изменена, и они определяют, находится ли эта ячейка в области, которую вы хотите проверить.Рассмотрим лист, настроенный следующим образом:

enter image description here

Когда вы настроите свой лист, перейдите в меню «Инструменты» и выберите «Редактор сценариев».Оттуда вы введете код ниже.То, что я даю вам, является примером, который вы должны изменить, чтобы удовлетворить свои потребности.Первая часть, которую нужно понять, это function onEdit.Это специальная функция, которая запускается КАЖДЫЙ раз, когда вносятся изменения в лист.Поэтому, когда у вас есть

function onEdit(eventObj) {
}

, то все, что вы помещаете в фигурные скобки, будет выполняться каждый раз, когда вносится изменение (после того, как пользователь введет Enter).Итак, ваша onEdit функция выглядит так:

function onEdit(eventObj) {
  //--- you could set up a dynamic named range for this area to make it easier
  var thisSheet = SpreadsheetApp.getActiveSheet();
  var checkRange = thisSheet.getRange("B2:D5");  
  if (isInRange(checkRange, eventObj.range)) {
    Logger.log('cell is in range');
    var propertyCell = eventObj.range;
    var timestampCell = thisSheet.getRange(propertyCell.getRow(), 5);
    timestampCell.setValue(Utilities.formatDate(new Date(), "UTC+8", "MM-dd-yyyy hh:mm:ss"));
  }  else {
    Logger.log('must be outside the range');
}

eventObj - это ячейка, которую пользователь редактировал и изменял.Поэтому мы используем эту ячейку для сравнения с нашей областью для проверки.Если мы определим, что ячейка находится в этой области, тогда мы продолжим и определим ячейку для хранения метки времени, а затем присвоим ей значение.Значением являются отформатированные дата и время.

Важной частью здесь является переменная checkRange, определяемая как область всех ваших свойств.Поэтому, когда запускается функция onEdit, она определяет область, которую вы проверяете, а затем вызывает isInRange, чтобы увидеть, находится ли отредактированная ячейка в этой области.Вот функция:

function isInRange(checkRange, targetCell) {
  Logger.log('checking isInRange');

  //--- check the target cell's row and column against the given
  //    checkrange area and return True if the target cell is
  //    inside that range
  var targetRow = targetCell.getRow();
  if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;
  Logger.log('not outside the rows');

  var targetColumn = targetCell.getColumn();
  if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;
  Logger.log('not outside the columns');

  //--- the target cell is in the range!
  return true;
}

Ваш результат будет выглядеть так:

enter image description here

Итак, теперь все вместе, просто скопируйтеи вставьте этот код в редактор скриптов:

function isInRange(checkRange, targetCell) {
  Logger.log('checking isInRange');

  //--- check the target cell's row and column against the given
  //    checkrange area and return True if the target cell is
  //    inside that range
  var targetRow = targetCell.getRow();
  if (targetRow < checkRange.getRow() || targetRow > checkRange.getLastRow()) return false;
  Logger.log('not outside the rows');

  var targetColumn = targetCell.getColumn();
  if (targetColumn < checkRange.getColumn() || targetColumn > checkRange.getLastColumn()) return false;
  Logger.log('not outside the columns');

  //--- the target cell is in the range!
  return true;
}

function onEdit(eventObj) {
  //--- you could set up a dynamic named range for this area to make it easier
  var thisSheet = SpreadsheetApp.getActiveSheet();
  var checkRange = thisSheet.getRange("B2:D5");  
  if (isInRange(checkRange, eventObj.range)) {
    Logger.log('cell is in range');
    var propertyCell = eventObj.range;
    var timestampCell = thisSheet.getRange(propertyCell.getRow(), 5);
    timestampCell.setValue(Utilities.formatDate(new Date(), "UTC+8", "MM-dd-yyyy hh:mm:ss"));
  }  else {
    Logger.log('must be outside the range');
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...