Скрипт проверки выпадающего списка не работает - PullRequest
0 голосов
/ 21 ноября 2018

Я хотел бы попросить помощи в модификации моего скрипта.Сценарий отвечает за отметку времени столбцов 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;
}

Пожалуйста, дайте мне знать, что мне нужно изменить, чтобы это произошло.Вот триггеры:

  1. Столбец F (Тема) запустит время начала и также покажет подтему (я могу заставить работать метку времени)
  2. СтолбецD (URL билета) запустит Время окончания.(Я могу заставить работать временную метку)

Теперь единственное, чего не хватает, - это проверки данных

Я мог бы использовать некоторую помощь со сценариями.

Спасибозаранее!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...