Google电子表格范围内的HTML选择选项

时间:2016-03-22 15:13:04

标签: html google-apps-script google-sheets

我正在寻找一个真正有效的代码,我尝试过的一切都行不通。愿有人帮帮我吗?

Sidebar.gs

function onOpen() {
  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
      .createMenu('Update project')
      .addItem('Open', 'showSidebar')
      .addToUi();
}

侧边栏显示正常,但组合中没有数据。我错过了什么?

function showSidebar() {
  var html = HtmlService.createHtmlOutputFromFile('Index')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setTitle('Project updater')
      .setWidth(200);
  SpreadsheetApp.getUi()
      .showSidebar(html);
}

Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <p>Create sub-folders </p>
  </head>
  <body>
    <script> // SpreadSheet
          var activSpSh = SpreadsheetApp.getActive();
          // Feuille répertoires créés
          var foldersSh = activSpSh.getActiveSheet();
          var lastRow = foldersSh.getLastRow();
          var myRange = foldersSh.getRange("A2:A"+lastRow); 
          var data    = myRange.getValues(); 
    </script>
    <div>
      <select>
        <script> for (var i = 0; i < data.length; ++i) { </script>
        <option><script>= data[i].getvalue(); </script></option>
        <script> } </script>
      </select>
    </div>
  </body>
</html>

2 个答案:

答案 0 :(得分:0)

Google Apps Script方法在服务器端运行,因此无法直接在HTML文件中调用它们。相反,它们应该通过使用几种可用的方法来调用。有关详细信息,请参阅https://developers.google.com/apps-script/guides/html/communication

答案 1 :(得分:0)

您需要使用createTemplateFromFile()方法而不是createHtmlOutputFromFile()方法。

function showSidebar() {
  var html = HtmlService.createTemplateFromFile('Index')
      .evaluate()
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setTitle('Project updater')
      .setWidth(200);
  SpreadsheetApp.getUi()
      .showSidebar(html);
}

您现在在<script>标记中的代码需要位于带有return data;语句的脚本(服务器端)文件中。

code.gs

function myFunction() {
  var activSpSh = SpreadsheetApp.getActive();
  // Feuille répertoires créés
  var foldersSh = activSpSh.getActiveSheet();
  var lastRow = foldersSh.getLastRow();
  var myRange = foldersSh.getRange("A2:A"+lastRow); 
  var data    = myRange.getValues();

  var optionsHTML = "";

  for (var i = 0; i < data.length;i+=1) {
    optionsHTML = '<option>' + data[i] + '</option>';
  };

  return optionsHTML;
}

然后你需要使用打印scriptlet:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <p>Create sub-folders </p>
  </head>
  <body>
    <div>
      <select>
       <?!= myFunction(); ?>
      </select>
    </div>
  </body>
</html>