#google-apps-script #timestamp
#google-apps-script #временная метка
Вопрос:
У меня работает приведенный ниже скрипт, за исключением нижней части, начинающейся с //3. Начальная часть работает на моем первом листе в списке и добавляет метку времени, если флажок установлен, очищает его, если он снят. Однако он работает только на первом листе, и мне нужно, чтобы он работал и на втором листе, указанном в списке. Данные настраиваются по-разному на каждом листе, поэтому у меня они разбиты. Я был бы признателен за любые рекомендации, я очень новичок в Apps Script и обучении, поэтому я уверен, что это новичок и глупая ошибка:
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSheet();
var r = ss.getActiveCell();
//1.Change 'Sheet1' to match your sheet name
if (r.getColumn() == 1 amp;amp; ss.getName()=='Sheet1') { // 2. If Edit is done in column 1 make change in column 4(D) then:
var celladdress ='D' r.getRowIndex();
if(r.getValue() !="" amp;amp; r.getValue() !=" "){
ss.getRange(celladdress).setValue(new Date()).setNumberFormat("MM/DD/YYYY hh:mm:ss");
} else{
ss.getRange(celladdress).clearContent();
}
//3.Change 'Sheet2' to to match your sheet name
if (r.getColumn() == 1 amp;amp; ss.getName()=='Sheet2') { // 4. If Edit is done in column (G) then:
var celladdress ='G' r.getRowIndex();
if(r.getValue() !="" amp;amp; r.getValue() !=" "){
ss.getRange(celladdress).setValue(new Date()).setNumberFormat("MM/DD/YYYY hh:mm:ss");
} else{
ss.getRange(celladdress).clearContent();
}
}
}
}
Ответ №1:
Точки изменения:
- В вашем скрипте я подумал, что можно использовать объект для поиска по имени листа.
- В этой модификации
var obj = {Sheet1: "D", Sheet2: "G"}
используется. - Например,
obj["Sheet1"]
возвращаетD
. Это используется для измененного скрипта.
- В этой модификации
- О флажке, вы также можете использовать
isChecked()
для проверки, установлен ли флажок.
Когда вышеуказанные пункты будут отражены в вашем скрипте, это будет выглядеть следующим образом.
Модифицированный скрипт:
function onEdit(e) {
var r = e.range;
var ss = r.getSheet();
// Prepare an object for searching sheet name.
var obj = {Sheet1: "D", Sheet2: "G"};
// Using the object, check the sheet and put or clear the range.
if (r.getColumn() == 1 amp;amp; obj[ss.getSheetName()]) {
var celladdress = obj[ss.getName()] r.getRowIndex();
if (r.isChecked()) {
ss.getRange(celladdress).setValue(new Date()).setNumberFormat("MM/DD/YYYY hh:mm:ss");
} else {
ss.getRange(celladdress).clearContent();
}
}
}
- В этом случае используется объект события. Но если вы хотите напрямую запустить функцию в редакторе сценариев, пожалуйста, измените следующим образом.
- От
var r = e.range; var ss = r.getSheet();
- Для
var ss = SpreadsheetApp.getActiveSheet(); var r = ss.getActiveCell();
- От
Ссылки:
Комментарии:
1. Большое вам спасибо! Я новичок, поэтому я не думаю, что повышение голосов пока работает для меня, но это определенно сработало.
2. @Chaz Спасибо за ответ и тестирование. Я рад, что ваша проблема была решена. И вам спасибо.