Передайте значение скрипта Google в HTML - PullRequest
0 голосов
/ 22 мая 2018

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

Я пытаюсь передать переменную из моего скрипта Google (которая изначально хранится в Google PropertiesService) в мой HTML, потому что я хочу использовать ранее сохраненные данные в качестве значений для моего поля ввода текста (показывая ранеесохраненные данные).

Это мой файл GS (минус несвязанные части):

function openSettings() {

  var htmlTemplate = HtmlService.createTemplateFromFile('settingsForm')


  var userProperties = PropertiesService.getUserProperties();
  var time = userProperties.getProperty('selectedTime');
  htmlTemplate.timehtml = time;

  var html = htmlTemplate.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setTitle('Settings')
    .setWidth(300)
  SpreadsheetApp.getUi()
    .showSidebar(html);
  return html
}

function processForm(form) {

  var userProperties = PropertiesService.getUserProperties();

  var time = userProperties.getProperty('selectedTime');
  time = form.time;
  userProperties.setProperty('selectedTime', time);
}

И это мой файл HTML (опущены другие несвязанные части):

<!DOCTYPE html>

<html>

<div>
 <form>
   <input type="text" name="time" id="time" style="width: 40px;">
   <br><br><input type="button" class="action" onClick="writeFormData(); 
   alert('submitted')" value="Submit"/>
 </form>
</div>

<script>
  var timeInput = document.getElementById("time");
  var timehtml = time;
  timeInput.value = timehtml;
</script>

<script type="text/javascript">
       function writeFormData() {
           google.script.run.processForm(document.forms[0]);
       }
</script>

</html>

Возможно, весь мой подход неверен.Но то, что я пытаюсь сделать, - это сохранить пользовательский выбор (может потребоваться изменить userProperties на documentProperties, чтобы сделать документ настроек специфичным) в Google PropertiesService, а затем сохранить эти значения, когда кнопки отправки нажимаются на боковой панели.В следующий раз, когда откроется боковая панель, эти сохраненные настройки должны быть показаны.

1 Ответ

0 голосов
/ 22 мая 2018

Вы на правильном пути.Поскольку вы уже передали переменную в объект HtmlTemplate, единственный оставшийся шаг - использовать механизм шаблонов GAS для его рендеринга.

.GS file

...
htmlTemplate.timehtml = time;
...

HTML template

   <input type="text" name="time" id="time" value="<?!= timehtml ?>">

Подробнее о шаблонном HTML в GAS здесь https://developers.google.com/apps-script/guides/html/templates

Причина, по которой ваш код не работает, заключается в том, что вы передаете переменную, устанавливая свойство объекта HtmlTemplate.Объекты HtmlTemplate и HtmlOutput существуют только в контексте среды выполнения GAS Script Editor.Ваш браузер заканчивает тем, что получает строку HTML, которую затем разбирает на элементы DOM и отображает.На этом этапе любой связанный с GAS контекст теряется, а локально установленное программное обеспечение браузера является новой средой выполнения для вашего кода.Вот почему вы не можете ссылаться на переменную timehtml.

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