У меня есть Google Sheet , содержащий два листа, один с именем Форма, а другой Данные. Информация на листе данных обычно вводится через лист формы, где нажатие кнопки на листе формы отправляет данные в нижний ряд на листе данных.
Я пытаюсь выяснить, как я могу добавить метку времени к соответствующей ячейке в столбце E таблицы данных, когда ячейка в той же строке в столбце D получает слово «ОЧИЩЕННЫЙ» либо в качестве представленияиз листа формы или в виде прямой ручной записи на листе данных.
Этот код в настоящее время добавляет метку времени, но только когда я изменяю значение в столбце D непосредственно на листе данных (а не когда значения добавляются с помощьюлиста формы) и добавляет метку времени для любого добавленного значения.
var ColumnToCheck = 4;
var DateTimeLocation = [0,1];
var sheetName = 'Data'
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
if( sheet.getSheetName() == sheetName ) {
var selectedCell = ss.getActiveCell();
if( selectedCell.getColumn() == ColumnToCheck) {
var dateTimeCell = selectedCell.offset(DateTimeLocation[0],DateTimeLocation[1]);
dateTimeCell.setValue(new Date());
}
}
}
Я использую этот код для передачи данных из листа формы:
function submitData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formSS = ss.getSheetByName("Form");
var dataSheet = ss.getSheetByName("Data");
var values = formSS.getRange("B2:B5").getValues().reduce(function(a, b) {
return a.concat(b)
});
var partNum = values[0];
var row;
dataSheet.getDataRange().getValues().forEach(function(r, i) {
if (r[0] === partNum) {
row = i + 1
}
})
row = row ? row : dataSheet.getLastRow() + 1;
var data = dataSheet.getRange(row, 1, 1, 4).getValues()[0].map(function (el, ind){
return el = values[ind] ? values[ind] : el;
})
dataSheet.getRange(row, 1, 1, 4).setValues([data]);
formSS.getRange("B2:B5").clearContent()
}
Что былучший способ автоматического добавления даты, когда вводится только слово «ОЧИЩЕНО»? Дата не должна очищаться, если слово «ОЧИЩЕНО» удалено или изменено на другое слово.
РЕДАКТИРОВАТЬ - РЕШЕНИЕ
Благодаря Сораб Хорарии я смогчтобы изменить функцию UPDATE на эту, чтобы учесть мои потребности (мои дополнения к его коду прокомментированы):
function submitData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formSS = ss.getSheetByName("Form");
var dataSheet = ss.getSheetByName("Data");
var values = formSS.getRange("B3:B6").getValues().reduce(function(a, b) {
return a.concat(b)
});
var partNum = values[0];
var row;
dataSheet.getDataRange().getValues().forEach(function(r, i) {
if (r[0] === partNum) {
row = i + 1
}
})
row = row ? row : dataSheet.getLastRow() + 1;
var data = dataSheet.getRange(row, 1, 1, 4).getValues()[0].map(function (el, ind){
return el = values[ind] ? values[ind] : el;
})
var statusValue = formSS.getRange("B6").getValue(); //added
if (statusValue != 'CLEANED') { //added
dataSheet.getRange(row, 1, 1, 4).setValues([data]); //added
} //added
if (statusValue == 'CLEANED') { //added
var now = [new Date()];
var newData = data.concat(now)
dataSheet.getRange(row, 1, 1, 5).setValues([newData]);
} //added
formSS.getRange("B3:B6").clearContent()
}