我目前正在创建一个电子表格,用户可以在其中输入商品编号,工作表将在接下来的两列中返回说明和价格。
电子表格从另一个工作表(而不是另一个页面,而不是整个不同的URL)中提取项目信息,并且每次输入项目编号时工作表都会自动更新(没有vlookup,因为信息位于另一个URL上)。
最有可能的是,多个人同时需要此表格,他们还需要一份参考记录副本。他们都可以访问我所拥有的“主文件”,我希望他们可以简单地复制然后填写表格。
但是,虽然我的脚本中的代码在主文件上工作得很好,但当他们复制时,程序将无法运行。我知道它与未被复制的触发器有关,我已经阅读了在脚本中编写触发器,但这就是问题所在。
用户无法看到脚本 - 也就是说,我们不希望他们看到任何代码。因此他们无法进入,通过“资源”打开触发器或单击脚本编辑器中的运行/调试。
所以基本上我需要用户能够打开共享的,仅查看文件,制作电子表格的副本(从另一张表中获取信息并具有触发器),并使用该电子表格购买输入项目编号。这些人中的大多数人不应该看到内部运作,也不会理解任何内容。
我在想一个可能的解决方案就像他们在25:56或37:355左右在this video所做的那样,他们可以按下按钮然后编写触发器。他们不会过去怎么做。
答案 0 :(得分:1)
根据我的理解,你不需要这里的脚本,电子表格公式就可以了 要将数据从一个电子表格导入另一个电子表格,您可以使用公式“importData”并将这些数据放入hiden表中。 然后你可以在这个导入上使用“vlookup”公式甚至更好的“过滤器”公式(尝试你喜欢它的过滤器公式)。
答案 1 :(得分:1)
如果您的用户都在私有域中,那么最佳解决方案是publish a private add-on(即仅适用于域用户)。如果您使用的是消费者帐户,那么这不是一种选择。
或者,您可以使用菜单驱动的功能以编程方式创建所需的触发器。这在您的情况下很有效,因为:
例如,您可以尝试this shared spreadsheet。它是共享公共的,只读,但如果您保存副本,您将看到一个自定义菜单,用于设置触发器功能,并更新电子表格中的第一个单元格。迟到十秒,触发功能再次更新它。
演示脚本包含在电子表格中,因此您可以在那里自己查看。以下是它的全部内容:
// Create a menu that will initialize the trigger
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Custom Menu')
.addItem('Initialize spreadsheet', 'setTrigger')
.addToUi();
}
function setTrigger() {
// clear any existing triggers
var triggers = ScriptApp.getUserTriggers(SpreadsheetApp.getActive())
for (var i=0; i<triggers.length; i++) {
ScriptApp.deleteTrigger(triggers[i]);
}
// set new trigger
ScriptApp.newTrigger("runTrigger")
.timeBased()
.after(10*1000) // 10s delay
.create();
announce("Trigger set. Wait for it...");
}
function runTrigger() {
announce("Trigger fired! This completes our demo.");
}
// Update first cell in spreadsheet
function announce(message) {
var range = SpreadsheetApp.getActive().getSheets()[0].getRange("A1");
range.setValue(message);
}
您可以包含“按钮”图像,而不是菜单,并将脚本链接到该图像。我没有看视频,但这可能就是他们所做的。您可以在How do you add UI inside cells in a google spreadsheet using app script?
中查看有关该(愚蠢,imho)选项的更多信息