我知道一些基本的javascript / app-script,我有以下代码
function onTimesheetOpen() {
var source = {
ssId : '1Mqbh09mj_UoRZiQkzw1gOVpHFiYk-8qZvpnDbzCYOFY',
shName : 'prompt',
a1Notation : "A1:A100",
};
var target = {
ssId : SpreadsheetApp.getActiveSpreadsheet().getId(),
shName : 'Setups',
a1Notation : "A1:A100",
};
AsExt.UTLCopyCell(source, target);
}
它是一个与一组工作人员共享的READONLY时间表模板,用于从员工表(源)复制员工列表并填充到我的目标(模板表)中。 onTimesheetOpen()触发因为我设置了一个触发器" From Spreadsheet"," On Open"事件。 每次打开模板时,它都会从主员工表中复制更新的员工。
工人的工作流程是制作副本'从模板时间表文件到他们的驱动器(我的驱动器),我注意到每次复制时都会删除触发器。它与传统的编程语言有很大的不同,我希望能从大师那里得到一些帮助:) 我不能指望每个工作人员在制作副本之后打开脚本编辑器'因为他们没有接受过IT培训,所以他们的工作就是获取时间表,其中列出了最新员工的名单(主文件)。
我也试过了可安装的触发器 https://developers.google.com/apps-script/guides/triggers/installable 这也不合适。
为了在他们复制的文件中创建一个触发器,他们必须运行以下代码ONCE(由于他们没有经过IT培训,这会让人感到困惑)
function createSpreadsheetOpenTrigger() {
var ss = SpreadsheetApp.getActive();
ScriptApp.newTrigger('onTimesheetOpen')
.forSpreadsheet(ss)
.onOpen()
.create();
}
向员工分享只读模板的最佳方式是什么?它会直接从主员工表中获取最新员工列表而不让他们接触代码?
万分感谢!
答案 0 :(得分:0)
你试过了吗?
function onOpen(e) {}
并且
ScriptApp.getProjectTriggers()
您可能可以检查是否已安装触发器。
答案 1 :(得分:0)
替代解决方案: 由于您的大多数用户都在智能手机上,因此您可以执行以下操作。您可以publish your sheet,只需选择网页选项即可。它会像这样创建链接:
https://docs.google.com/spreadsheets/d/e/2PACX-1vSLilJvnFXiPW1ZsqRNQIVQDXasxYihzbEpxCO54nSpjv1IBIur1p5U7G8oJ2P8ThmZXYuV6LPJVZ8s/pubhtml?gid=725782869&single=true
您可以直接与工作人员共享,也可以使用Google工作表的importHtml()
功能将这些发布值导入到工作表中
IMPORTHTML("https://docs.google.com/spreadsheets/d/e/2PACX-1vSLilJvnFXiPW1ZsqRNQIVQDXasxYihzbEpxCO54nSpjv1IBIur1p5U7G8oJ2P8ThmZXYuV6LPJVZ8s/pubhtml?gid=725782869&single=true","table",1)
备注强>
1)任何人都可以查看该链接
2)如果在线观看,它假设每隔5分左右更新一次
3)如果使用importHtml()在工作表中查看,则在重新打开工作表时将刷新
4)ImportHTML()确实需要像importRange()一样授权,因此在复制时仍然可以工作
5)您可以直接发布源表。