Google表单中的变量URL引用



我正在开发一个工作面板,其中包含一组信息,包括我们每个客户的唯一链接。我正在尝试编写一个脚本,当单击按钮时,该脚本将在新窗口中打开url。但是,我需要根据我们选择的客户端更改URL。

这是我写的代码。这很糟糕,就像真的很糟糕,但我一直在思考我应该怎么做。

var SPREADSHEET_NAME = "Database";
var SEARCH_COL_IDX = 0;
var RETURN_COL_IDX = 0;
function openLink() {

var ss        = SpreadsheetApp.getActiveSpreadsheet();
var formSS    = ss.getSheetByName("Dashboard"); //Form Sheet

var str       = formSS.getRange("B2").getValue();
var values    = ss.getSheetByName("Database").getDataRange().getValues();
for (var i = 0; i < values.length; i++) {
var row = values[i];
if (row[0] == str) {
var html = "<script> window.open(ss.getValue(row[1]));</script>";
var ui = HtmlService.createHtmlOutput(html)
SpreadsheetApp.getUi().showModelessDialog(ui,"Loading");
}
}
}

这里有一个链接到谷歌工作表,它在一个非常基本的层面上显示了我希望这个功能如何工作。当我在仪表板上的B2中选择";链接";然后按下按钮,与我在B2中选择的选项相关联的URL(即在数据库选项卡中(将打开。

https://docs.google.com/spreadsheets/d/1edKkHluCk3o0x96sQ7cw-cHcMBUnXzaOiPoywJA6Dyc/edit?usp=sharing

我相信你的目标如下。

  • 您希望在运行openService的脚本时打开新窗口
  • 您想要从单元格"中检索值;B2";的";"Dashboard";,并且想要从"打开URL;数据库";使用检索到的值

修改点:

  • 遗憾的是,"<script> window.open(ss.getValue(row[1]));</script>"无法直接运行。在这种情况下,我建议在脚本中将URL设置为window.open(URL)
  • 修改后的脚本的流程如下。
    1. 从单元格"中检索值;B2";的";仪表板">
    2. 从";数据库">
    3. 创建一个用于搜索URL的对象
    4. 使用对象检索URL并打开新窗口

当上面的流反映到您的脚本中时,它变成如下。

修改的脚本:

function openService() {
var ss = SpreadsheetApp.getActiveSpreadsheet();

// 1. Retrieve the value from cell "B2" of "Dashboard".
var formSS = ss.getSheetByName("Dashboard");
var str = formSS.getRange("B2").getValue();

// 2. Retrieve the values from "Database".
var [, ...values] = ss.getSheetByName("Database").getDataRange().getValues()

// 3. Create an object for searching the URL.
var obj = values.reduce((o, [a, b]) => Object.assign(o, {[a]: b}), {});

// 4. Open new window.
if (obj[str]) {
var html = `<script>window.open("${obj[str]}"); google.script.host.close();</script>`;
var ui = HtmlService.createHtmlOutput(html)
SpreadsheetApp.getUi().showModelessDialog(ui,"Loading");
}
}

注:

  • 在此修改中,打开新窗口后,使用google.script.host.close()关闭对话框。如果您不想关闭对话框,请将其删除
  • 请将此脚本用于启用V8

参考文献:

  • reduce((
  • Window.open((

最新更新