Работающая проверенная javascript не работает при запуске из шаблона Google Sheets html - PullRequest
1 голос
/ 20 февраля 2020

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

Я тестирую некоторые сценарии на листах Google, использую шаблон HTML.

Часть моего скрипта требует вызова данных массива. Я тестирую запуск этого скрипта: http://jsfiddle.net/nExgJ/

Вы увидите, что скрипт работает так, как нужно.

Однако, когда шаблон HTML запускается из Google Sheets даже с одним и тем же кодом цифры не заполняются.

В скрипте Google Sheets для запуска шаблона HTML используется следующая функция:

  var htmlDlg = HtmlService.createHtmlOutputFromFile('index')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setWidth(500)
      .setHeight(150);
  SpreadsheetApp.getUi()
  .showModalDialog(htmlDlg, 'Select An Existing Client');
}

У меня также есть функция doGet, которая выглядит следующим образом:

function doGet() {
 var htmlOutput = template.evaluate()
                   .setSandboxMode(HtmlService.SandboxMode.NATIVE);
  return htmlOutput;
  return HtmlService.createHtmlOutputFromFile('index');
}

Тогда код в моей форме HTML выглядит следующим образом:

<!DOCTYPE html>
<html>
  <head>
     <script>
    // Get dropdown element from DOM
var dropdown = document.getElementById("selectNumber");

// Loop through the array
for (var i = 0; i < myArray.length; ++i) {
    // Append the element to the end of Array list
    dropdown[dropdown.length] = new Option(myArray[i], myArray[i]);
}

    </script>
  </head>
  <body>
<form id="myForm">
  <select id="selectNumber">
    <option>Choose a number</option>
  </select>
</form>
  </body>
</html>

фактический результат при выполнении кода

Любая помощь будет с благодарностью. Спасибо!

1 Ответ

1 голос
/ 20 февраля 2020

В Apps Script вы можете реализовать эту функцию, используя скриптлеты

Преимущество скриплетов заключается в том, что вы также можете включать данные из вашей электронной таблицы или переменных из Code.gs в ваши параметры.

Образец:

index. html

<!DOCTYPE html>
<html>
<head>
<script>
</script>
</head>
<body>
<form id="myForm">
  <select id="selectNumber">
    <option>Choose a number</option>
    <? var myArray = new Array("1", "2", "3", "4", "5");?>
    <? for (var i = 0; i < myArray.length; ++i) { ?>
     <option> <?=myArray[i]?> </option>
     <? } ?>
  </select>
</form>
  </body>
</html>

Code.gs

function myFunction() {
  var template = HtmlService.createTemplateFromFile('index');  
  var htmlDlg = template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
  .setWidth(500)
  .setHeight(150);
  SpreadsheetApp.getUi()
  .showModalDialog(htmlDlg, 'Select An Existing Client');
}

ОБНОВЛЕНИЕ:

Если вы предпочитаете использовать свой сценарий, вы должны перемещать его с головы до тела после остального содержания html.

Это позволяет вам визуализировать содержимое HTML (в основном, создать элемент с идентификатором "selectNumber") перед изменением содержимого этого html с помощью Javascript, см. Best Practices .

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