Не удается активировать лист из автономного скрипта (скрипт Google Apps) - PullRequest
0 голосов
/ 04 мая 2019

Чтобы защитить код (чтобы люди его не видели), я управляю своей электронной таблицей из автономного скрипта.

Все функции работают, кроме активации листа или ячейки (эти функции работают со связанным скриптом,расчеты верны, ячейка активируется).

Я попытался активировать лист из автономного скрипта, а затем добавил его в виде библиотеки и вызвал из связанного скрипта моего файла.Ничего не работает.

Мне нужно активировать лист и ячейку при открытии электронной таблицы.

Вот мой код (привязан к электронной таблице):

function onOpen() {      
    RandomNetwork.goToLastBlock()
}

Вот код избиблиотека (автономный скрипт):

//goes to the last block on the sheet
function goToLastBlock() {  

    var file = SpreadsheetApp.openById("1kTOcxVv7RgIvp-BVvbZyBbeE92HiAKm8hbFURh19Enc")

    var sheets = file.getSheets()

    for (var i in sheets) {

        var sheetID = sheets[i].getSheetId()

        if (sheetID === 908402362) {

            var lr = sheets[i].getLastRow()
            var cell = sheets[i].getRange(lr, 1)

            sheets[i].activate()
            sheets[i].setCurrentCell(cell)

            return
        }
    }
  }

Когда я запускаю его из связанного скрипта, он находит эту электронную таблицу и лист, правильно вычисляет последнюю строку.Но когда я запускаю скрипт, он ничего не делает.

Как я могу активировать лист и ячейку из автономного скрипта ?Буду признателен за любые предложения.

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Каждый раз, когда вы меняете код в библиотеке, вам нужно публиковать новую версию, а также вы должны изменить номер версии в связанном скрипте для библиотеки.

В качестве теста я ставлюследующий код в автономном скрипте:

//goes to the last block on the sheet
function goToLastBlock() {  

    var file = SpreadsheetApp.getActive();

    var sheets = file.getSheets()
    var theSheet = sheets[0];

    var lr = theSheet.getLastRow()
    var cell = theSheet.getRange(lr, 1)

    theSheet.activate()
    theSheet.setCurrentCell(cell)

    return theSheet.getSheetName();
}

Затем из скрипта, привязанного к листу, я добавил библиотеку (отдельно) в связанный скрипт и запустил код из связанного скрипта:

function onOpen() {      
    RandomNetwork.goToLastBlock()
}

Код активировал ячейку столбца A в последнем ряду.

Я опубликовал библиотеку как веб-приложение для выполнения как «Пользователь, обращающийся к веб-приложению» и «любой пользователь в организации»."

Это сработало для меня с предоставленным примером кода и настройкой, как описано.

0 голосов
/ 04 мая 2019

Вы не можете активировать лист и ячейку из автономного скрипта.

Только скрипты, связанные с контейнером, могут сделать листы и диапазоны активными.Конкретные методы, которые вы используете, явно не упоминаются в описании контейнера , но это реальность.

В библиотеках есть более тонкая область видимости, о которой вы можете прочитать больше о здесь .Как указано в таблице (в ссылке), библиотеки получают доступ к контейнеру.По сути, поскольку ваш сценарий, связанный с контейнером, использует библиотеку, автономный сценарий копируется, если хотите, в сценарий, связанный с контейнером, и, следовательно, получает доступ к этим привилегированным методам.

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