繁体   English   中英

将电子表格中的数据更新或插入到下拉列表中的对话框中

[英]Updating or inserting data from a Spreadsheet into a Dialog box inside a dropdown

目标:目的是工作表将包含信息,此信息放置在命名范围内,命名范围将是动态的(给整列一个命名范围)。 我创建了一个 html 弹出窗口,其中包含一个下拉列表。 此下拉列表必须包含来自命名范围的信息列表。

我无法理解如何做到这一点。 这是下面的代码:

   function fncOpenMyDialog() {
  var htmlDlg = HtmlService.createHtmlOutputFromFile('HTML_myHtml')
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setWidth(200)
      .setHeight(150);
  SpreadsheetApp.getUi()
      .showModalDialog(htmlDlg, 'New File');
};

function onInstall(e) {
  onOpen(e);
}

function onOpen(e) {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('New')
  .addItem('New Save File Extension','fncOpenMyDialog')
  .addToUi();
}
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <select name="nameYouWant" placeholde="File Type">
  <option value="something">Word</option>
  <option value="anything">MS Excel</option>
  <option value="anything">MS Powerpoint</option>
  <option value="anything">MS Slides</option>
  </select>

<hr/>
<p>Choose a file, which will then be saved into your Google Drive.</p>

<button onmouseup="closeDia()">Close</button>
<button onmouseup="onOpen()">Save</button>

<script>
  window.closeDia = function() {
    google.script.host.close();
  };
  window.saveDia = function() {
  onOpen();
  };
</script>
  </body>
</html>

正如您在我的 html 文件中看到的那样,扩展目前是硬编码的。 我正在尝试使这种动态化,我该如何实现?

我相信你的目标如下。

  • 您希望通过从电子表格的命名范围中检索来将值放入下拉列表。
    • 在这种情况下,命名范围是否与该线程相同?

为此,这个答案怎么样?

修改点:

  • google.script.host.close() ,我了解到 HTML_myHtml 的HTML_myHtml文件包含在 Google Apps 脚本项目中。 通过这个,我想建议使用google.script.run来实现你的目标。
  • 如果命名范围和你之前的问题一样,稍微修改一下就可以使用了。

当以上几点反映到您的脚本时,它变成如下。

修改后的脚本:

HTML 和 JavaScript 端: HTML_myHtml

请按如下方式修改HTML_myHtml

<!DOCTYPE html>
<html>

<head>
    <base target="_top">
</head>

<body>
    <select id="select" name="nameYouWant" placeholde="File Type"></select>
    <hr />
    <p>Choose a file, which will then be saved into your Google Drive.</p>
    <button onmouseup="closeDia()">Close</button>
    <button onmouseup="onOpen()">Save</button>
    <script>
        google.script.run.withSuccessHandler(v => {
            const obj = document.getElementById("select");
            v.forEach(e => {
                const option = document.createElement("option");
                option.text = e;
                option.value = e;
                obj.appendChild(option);
            });
        }).readNamedRange();

        window.closeDia = function() {
            google.script.host.close();
        };

        window.saveDia = function() {
            onOpen();
        };
    </script>
</body>

</html>

Google Apps 脚本端: Code.gs

在上面的 HTML 中,使用readNamedRange() 所以请输入以下脚本。 如果您有相同的 function 名称,请修改它们。 在这个脚本中,值从listDown的命名范围中检索,并使用google.script.run发送到 HTML 端。

function readNamedRange() {
  var activeSheet = SpreadsheetApp.getActiveSheet();
  var result = activeSheet.getRange("listDown").getValues();
  var end = activeSheet.getLastRow();
  var values = [];
  for (var i = 0; i < end; i++) {
    if (result[i][0] != "") {
      values.push(result[i][0]);
    }
  }
  return values;
}

笔记:

  • 关于window.saveDia = function() {onOpen()}; ,不幸的是,我不明白你想做什么。

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM