Я хотел бы попросить помощи в модификации моего скрипта.Сценарий отвечает за отметку времени столбцов F и D. А также проверку выпадающего списка столбца G.
Что произойдет, если я выберу тему в столбце F, отметка времени отобразится встолбец H (Пуск), а также покажет валидацию, соответствующую выбранной теме.Если URL-адрес билета вставлен в столбец D (URL-адрес билета), то в столбце I (Конец) будет отображаться временная метка.
Вот мой образец листа: https://docs.google.com/spreadsheets/d/1CSmpqN01a_Y4XOXwpclEaEnkT-7Lx9QdM7hV4XXcrPM/edit#gid=1087363288
Вот сценарий, который яУже несколько дней меняю.
function onEdit(e) {
var sheet, cols, colInd, offset, format;
sheet = e.source.getActiveSheet();
cols = [6,4,6];
colInd = cols.indexOf(e.range.columnStart);
if (colInd == -1) return;
if (colInd < 3) {
offset = [2, 5]
format = colInd == 0 ? "HH:mm:ss" : "HH:mm:ss";
e.range.offset(0, offset[colInd])
.setValue(Utilities.formatDate(new Date(), "GMT+8", format));
} else {
setValidation(e);
}
}
function setValidation(e) {
var allValues, list,
/*'easy to change' variables*/
sheetWithLists = 'Validation',
rangeWithLists = 'A1:Y', //assuming the first row to be the header row
secondValidationOffset = 1; //the offset from the above column / the column with the 'second' validation
/*check conditions*/
if (e.range.rowStart < 1 || typeof e.value == 'object') return;
Logger.log('passed')
/*get all values from the sheet with the lists (cached after the first run)*/
allValues = getFromCache(sheetWithLists, rangeWithLists)
Logger.log(allValues)
Logger.log(allValues[0].indexOf(e.value));
/*get the correct list(column) and remove the header*/
list = allValues.map(function (v, i) {
return v[allValues[0].indexOf(e.value)]
})
.splice(1);
Logger.log(list)
/*set the validation in offset column*/
e.range.offset(0, secondValidationOffset)
.setDataValidation(SpreadsheetApp.newDataValidation()
.requireValueInList(list)
.build());
}
function testCache() {
var sheetWithLists = 'Validation';
var rangeWithLists = 'D1:BF';//assuming the first row to be the header row
Logger.log(getFromCache(sheetWithLists, rangeWithLists))
}
function getFromCache(sheetName, range) {
var key = 'DD_' + sheetName,
c = CacheService.getPublicCache(),
d,
t = c.get(key);
if (t) {
d = JSON.parse(t);
} else {
d = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName(sheetName)
.getDataRange()
.getValues();
c.put(key, JSON.stringify(d));
}
return d;
}
Пожалуйста, дайте мне знать, что мне нужно изменить, чтобы это произошло.Вот триггеры:
- Столбец F (Тема) запустит время начала и также покажет подтему (я могу заставить работать метку времени)
- СтолбецD (URL билета) запустит Время окончания.(Я могу заставить работать временную метку)
Теперь единственное, чего не хватает, - это проверки данных
Я мог бы использовать некоторую помощь со сценариями.
Спасибозаранее!