Добавить вывод функции в sidbar - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь добавить вывод функции OplionList () на боковую панель

Боковая панель открывается, но вывод отсутствует

Я предполагаю, что функция OplionList () не читается

Не уверен, какие подробности я могу дать

После нескольких часов неудачных попыток обратиться за помощью

Спасибо

Code.gs

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Refresh')
      .addItem('Get Option List', 'displayOptionList')
      .addToUi();     
};


function displayOptionList(){
  var ui = HtmlService.createTemplateFromFile('Sidebar')
    .evaluate()
    .setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setTitle('Option List');
SpreadsheetApp.getUi().showSidebar(ui);

};

Sidebar.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>

    <div id="OP"></div>
    <script>
       function OplionList() {
       var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
       var lr = sheet.getLastRow();
       var values = sheet.getRange(2, 1, lr, 3).getValues();
       values = values.filter(function(e){return e[0] && e[1] && e[2]});
       var result = [];

       //Add items to results
       for(var i=0; i<values.length; i++){ // Modified
         result[i] = ["option {<br />label: \"" + values[i][1] + "\";<br />" + "selector: [\"" + values[i][0] + "\"=\"" + values[i][2] + "\"];<br />}<br />"];
       };

       var temp = ""
       for(var i=0; i<result.length; i++){ // Modified
          temp = temp +  [result[i] + "\n"];
       };

       temp = "target: \" element \";<br />" +"as dropdown;<br />" + temp + "}"

       return temp

      };
    </script>    
  </body>
</html>

Ответы [ 2 ]

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

Помните, что классы и методы служб Google Apps Script доступны только в виде серверного кода. В частности, мы не можем использовать SpreadsheetApp для клиентского кода.

Что касается не прочитанной функции OptionList, код на стороне клиента не включает в себя вызов этой функции.

Ознакомьтесь с руководством по Диалоги и боковые панели в документах G Suite .

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

Есть несколько проблем с вашим скриптом.

1) Ваша функция OplionList () объявлена, но не вызвана. Вам все еще нужно явно вызвать функцию (см. Ниже) или обернуть ваш код в немедленно вызванное выражение функции.

<body>
    <h1>Hello world</h1>
    <script>

   function myFunc(){
    console.log(5);
   }

   myFunc(); //calls the function

    </script>
  </body>

или

<script>
 (function(){

   console.log(5);

  })();

2) Во-вторых, вы не можете напрямую вызывать функции Apps Script со стороны клиента. Код на стороне клиента отображается вашим браузером, в то время как код GAS выполняется на серверах Google, поэтому среда выполнения не является общей. Классы Apps Script, такие как SpreadsheetApp, DocumentApp и другие, не могут быть волшебным образом перенесены в вашу локальную браузерную программу. Тем не менее, Google предоставляет способ вызова функций GAS с использованием асинхронного JavaScript API.

Рассмотрите возможность перемещения OplionList () в файл .gs, вызовите его из клиента с помощью google.script.run, а затем вставьте строку HTML в страницу, используя функцию на стороне клиента. Выходные данные функции сервера передаются в качестве аргумента для обратного вызова withSuccessHandler. Вот простейший сценарий рендеринга сгенерированного сервером содержимого внутри div:

<body onload="populateContainer()">
<div id="container">Loading...</div>
...
<script>
var container = document.getElementById("container");

function populateContainer(){

google.script.run
             .withSuccessHandler(function(html){
                  container.innerHTML = html;
              })
             .withFailureHandler(function(error){ console.log(error);})
             .OplionList(args);

}

</script>
</body>

Подробнее о взаимодействии клиент-сервер в GAS https://developers.google.com/apps-script/guides/html/communication

Другой метод - использовать скриптлеты для создания ваших шаблонов. https://developers.google.com/apps-script/guides/html/templates#scriptlets

Имейте в виду, что это замедлит работу вашего кода.

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