Чтобы сделать эту работу, вам нужно будет ввести код. Эта ссылка дает хороший пример того, как создать скрипт для вашего листа.
Самая важная часть вашего скрипта - вы хотите, чтобы он запускался КАЖДЫЙ раз, когда вы вносите изменения влист в ЛЮБОЙ ячейке.Затем, когда он запускается, вы можете проверить, какая ячейка была изменена, и они определяют, находится ли эта ячейка в области, которую вы хотите проверить.Рассмотрим лист, настроенный следующим образом:
Когда вы настроите свой лист, перейдите в меню «Инструменты» и выберите «Редактор сценариев».Оттуда вы введете код ниже.То, что я даю вам, является примером, который вы должны изменить, чтобы удовлетворить свои потребности.Первая часть, которую нужно понять, это 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;
}
Ваш результат будет выглядеть так:
Итак, теперь все вместе, просто скопируйтеи вставьте этот код в редактор скриптов:
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');
}
}