我正在开发一个工作面板,其中包含一组信息,包括我们每个客户的唯一链接。我正在尝试编写一个脚本,当单击按钮时,该脚本将在新窗口中打开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)
- 修改后的脚本的流程如下。
- 从单元格"中检索值;B2";的";仪表板">
- 从";数据库">
- 创建一个用于搜索URL的对象
- 使用对象检索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((