Использование переменной из другого скрипта в том же документе (скрипты приложений) - PullRequest
2 голосов
/ 30 сентября 2019

Я пытаюсь получить доступ к переменной из другого скрипта A.gs в скрипте B.gs. они оба в одном документе. Как я могу это сделать?

Я не уверен, как мне решить эту проблему, я новичок в создании сценариев приложений и не могу найти в Интернете ничего об этом.

code.gs:

ui = DocumentApp.getUi();
function onOpen () {
    A = prompt('Hello');
}

code2.gs:

function onOpen () {
    if (A === "123") {
       ui.alert('Hello')
    }
}

Я хочу вывести Hello, если в приглашение введено 123, но когда я пытаюсь запустить код, я получаю сообщение об ошибке:

ReferenceError: "A" is not defined. (line 3, file "code2")

Ответы [ 2 ]

3 голосов
/ 30 сентября 2019
  • В вашей ситуации code.gs и code2.gs находятся в проекте с привязкой к контейнеру типа Google Document.

Если мое понимание верно, как насчет этого? ответ? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Точки изменения:

В вашем скрипте скрипты code.gs и code2.gs используются как один проект в редакторе скриптов. Итак, в вашем скрипте есть 2 одинаковые функции onOpen() в проекте. В этом случае только один из них запускается. В вашем случае onOpen() из code2.gs запускается и возникает ошибка ReferenceError: "A" is not defined..

Модифицированный скрипт:

Если вы хотите изменить свой скрипт и хотите работать сфункционирует при открытии Документа Google, как насчет следующей модификации?

1. Скопируйте и вставьте следующий скрипт в code.gs и code2.gs редактора скриптов:

code.gs:
var ui = DocumentApp.getUi();
function installedOnOpen () {
    A = prompt('Hello'); // or ui.prompt('Hello').getResponseText();
    sample(A);
}
code2.gs:
function sample (A) {
    if (A === "123") {
       ui.alert('Hello')
    }
}

Или, если вы хотите независимо запустить 2 функции,как насчет следующей модификации? В этой модификации значение сохраняется с помощью PropertiesService.

code.gs:
var ui = DocumentApp.getUi();
function installedOnOpen () {
    A = prompt('Hello'); // or ui.prompt('Hello').getResponseText();
    PropertiesService.getScriptProperties().setProperty("key", A);
}
code2.gs:
function sample () {
    var A = PropertiesService.getScriptProperties().getProperty("key");
    if (A === "123") {
       ui.alert('Hello')
    }
}

Или вы также можете изменить его следующим образом. Но в вашей ситуации это может не потребоваться.

function installedOnOpen () {
  var ui = DocumentApp.getUi();
  var A = ui.prompt('Hello').getResponseText();
  if (A === "123") {
    ui.alert('Hello');
  }
}

2. Установите триггер события OnOpen:

Чтобы запустить функцию installedOnOpen при открытии документа Google, , установите триггер события OnOpen на функцию installedOnOpen в качестве устанавливаемого триггера.

3. Запустить скрипт:

В вашем случае есть 2 шаблона для запуска скрипта.

Шаблон 1:

Открыть Google Document.

Шаблон 2:

Выполнить installedOnOpen в скриптередактор.

Выше, installedOnOpen выполняется. И вы можете увидеть диалог в Google Document.

Примечание:

  • Эта модификация предполагает, что функция prompt() возвращает значение 123 в качестве строкового значения.
    • Если вы не можете предоставить сценарий prompt(), в качестве контрольного примера, как насчет изменения с prompt('Hello'); на ui.prompt('Hello').getResponseText();?

Ссылки:

Если я неправильно понял ваш вопрос и это не то направление, которое вам нужно, я приношу свои извинения.

0 голосов
/ 30 сентября 2019

Как я вижу, вы определяете onOpen дважды. Это не имеет смысла.

Вы также не объявляете переменные, и это отражается в стиле вашего кода. Попробуйте объявить переменные, и вы поймете, что ваш код не имеет никакого эффекта.

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