从Google电子表格的列中填充HTML下拉菜单

时间:2019-01-16 12:23:48

标签: javascript html google-apps-script drop-down-menu google-sheets

我是.gs的新手,所以这并不难。

我有一个Google Spreadsheet,其中一列中有值(比如说A列)。 我已经使用.gs创建了一个自定义菜单,用户可以在其中选择一个选项。

单击其中一个选项(新组件),将弹出一个带有下拉菜单的弹出窗口,用户应从这些菜单中进行选择。

CustomMenu.gs

 function onOpen() {
 var ui = SpreadsheetApp.getUi();
 // Or DocumentApp or FormApp.
 ui.createMenu('bq Library Menu')
  .addItem('Add new component', 'newComponent')
  .addSeparator()
  .addSubMenu(ui.createMenu('Modify existing component')
      .addItem('Remove component', 'removeComponent'))
  .addToUi();
 }

 function newComponent() {

 var html = HtmlService.createHtmlOutputFromFile('NewComponentForm')
     .setWidth(400)
     .setHeight(300);
 SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
     .showModalDialog(html, 'New Component Form');
 }

NewComponentForm.html

<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
  <h2>Clickable Dropdown</h2>
  <p>Select manufacturer from the list</p>

  <div class="dropdown">
     <button onclick="loadManufacturers()" class="dropbtn">Dropdown</button>
     <div id="myDropdown" class="dropdown-content"></div>
  </div>

</body>

我希望下拉菜单显示电子表格中A列中的所有元素。我尝试了几种方法,但没有获得所需的结果。

那么,我该如何继续执行下拉列表填充过程?

1 个答案:

答案 0 :(得分:1)

  • 您要创建一个选择框,并将电子表格“ A”列中的值放入。
  • 从选择框中选择一个值后,您要检索该值。

如果我的理解是正确的,那么该修改如何?我认为您的情况有几个答案,因此请仅将其中一个作为答案。

此修改后的脚本的流程如下。

  1. 打开一个对话框。
  2. 单击“下拉”按钮。
  3. 通过google.script.run,在Google Apps脚本端运行getValuesFromSpreadsheet()的功能。
  4. getValuesFromSpreadsheet(),从电子表格中检索值并返回到Javascript。
  5. withSuccessHandler(),检索返回的值。使用这些值,将创建一个选择框。
  6. 选择选择框的值后,将运行selected()并检索选择的值。

反映以上流程时,修改后的脚本如下。

GAS:

请将以下Google Apps脚本添加到CustomMenu.gs

function getValuesFromSpreadsheet() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  return sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues(); // Retrieve values and send to Javascript
}
  • 在此示例脚本中,从活动电子表格的“ Sheet1”中检索值。值在“ A”列中。
    • 如果要从其他范围和工作表中检索,请进行修改。

HTML:

请将以下Javascript添加到NewComponentForm.html

<script>
  function loadManufacturers() {
    google.script.run.withSuccessHandler(function(ar) {
      let select = document.createElement("select");
      select.id = "select1";
      select.setAttribute("onchange", "selected()");
      document.getElementById("myDropdown").appendChild(select);
      ar.forEach(function(e, i) {
        let option = document.createElement("option");
        option.value = i;
        option.text = e;
        document.getElementById("select1").appendChild(option);
      });
    }).getValuesFromSpreadsheet();
  };

  function selected() {
    const value = document.getElementById("select1").value;
    console.log(value);
  }
</script>
  • 使用google.script.run从电子表格中检索值。
  • 使用withSuccessHandler,从Google Apps脚本中检索值。
  • 单击“下拉”按钮时,将创建一个选择框。
  • 可以在控制台上看到所选的值。

注意:

  • 这是一个简单的示例脚本。因此,请根据您的情况进行修改。

参考文献:

如果我误解了你的问题,对不起。