问题是我有各种电子表格(a),其中只有一个人具有查看和编辑权限,还有其他人需要这些电子表格中的一些数据(a)用于他们的电子表格(b),他们还需要能够从电子表格中获取数据的更新版本(a)
我现在创建了一个解决方法,使用带有编辑功能的可安装触发器(他们必须更改电子表格中的特定字段)来更新数据,但是人们想要一个他们可以点击的按钮/绘图或菜单条目从电子表格中获取更新的数据(a)。
从我的角度来看,将可安装的触发器与按钮/绘图/菜单条目相结合是一个死胡同。因此,我的问题是,如果有任何其他可能性来授予对电子表格数据的访问权限,而不对数据来源的文档提供查看或编辑权限......
如果有人愿意,请提前感谢
答案 0 :(得分:1)
您将要遇到的电子表格中使用的触发器有一些限制。查看this了解详情。基本上,onEdit
触发器无法访问/修改另一个电子表格They cannot access any services that require authentication as that user.
要更新当前电子表格之外的其他电子表格,我只需安装一个函数和一个菜单项来触发它。 (这是你说的死胡同吗?)它确实取决于用户更新组,但这对我的安全数据有利,因为它需要密钥持有者的知识才能允许其他人获取信息。这是A
到B
,这是可能的,但B
必须具有A
电子表格的编辑权限。
不,B
无法从A
获取信息,除非他们可以访问它,至少与查看者一样。您无法向单个单元格授予查看权限,这基本上就是您要执行的操作。
如果没有这种能力,解决方案更多的是构建数据流。在一个用户证明他们无法信任定期更新团队的senerio中,我将自己创建为0
。我拥有A
和B
的权限。我从0
运行该功能以访问A
并更新B
,它还会向他们发送电子邮件,因此所有人都知道上次更新的时间。为什么我不使用A
电子表格来运行该功能,因为从0
我可以访问它并将其写入B
而无需查看数据。这是无知的面纱。我从未真正打开A
,0
仍为空。
我能做的最好。
答案 1 :(得分:0)
我遇到了类似的问题。
我认为我找到了一种解决方法,但不能保证。
我使用了importrange
函数,我打算通过脚本来控制它。
我已经尝试了刷新功能,发现它是强制importrange
工作的好触发器,我将其添加到Menu
(以防万一)。
function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [];
menuEntries.push({name: "Refresh", functionName: "SheetFlush"});
ss.addMenu("Menu", menuEntries);
}
function SheetFlush() {
SpreadsheetApp.flush();
}
现在,因为我不希望B
用户知道A
SS唯一地址。
(当查看importrange
函数时)
我正在使用importrange
SS中的B
功能保护和隐藏工作表。我在B
SS中使用额外的内部参考来隐藏表格。
答案 2 :(得分:0)
我可能对你的异常有一个答案。 我的应用程序客户端是来自我的googleapp工作组的人,他们没有权限 查看文件,但他们不是一个完全陌生的人。
我认为以下可能有效。 文件是带代码的集合文件。 B文件具有来自A的importrange()函数,具有共享权限。 并且C文件具有来自B的importrange()以及B文件的共享permmsion。 小麻烦是B文件有一个隐藏和保护的链接表。 我检查过这个,如果你不是主人,你就可以取消隐藏它。
在实践中,我的填充是你可以使用2个SpreadSheets进行类似的技巧, 第三个是为了额外的安全。