Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script Google应用程序脚本-是否可以从脚本更新受保护的范围?_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script Google应用程序脚本-是否可以从脚本更新受保护的范围?

Google apps script Google应用程序脚本-是否可以从脚本更新受保护的范围?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我希望使用受保护的范围来锁定范围,但通过使用UI,我希望用户能够进行编辑、插入新数据等。我只希望编辑是经过深思熟虑的 我想到了一些解决方案,但不确定它们将如何影响负载,也不确定哪一个方向是最佳方向: 取消对范围的保护并重新进行保护,授予编辑权限并将其删除。使用java脚本,而不是内置的受保护范围功能。这似乎是不可能的,但即使脚本是从我的帐户运行的,也可以正常工作(工作簿都是从我的帐户设计的,但我有对受保护范围的编辑权限) 任何帮助都将不胜感激,提前谢谢 脚本的背景: 我有公司内特定项目的工作手册

我希望使用受保护的范围来锁定范围,但通过使用UI,我希望用户能够进行编辑、插入新数据等。我只希望编辑是经过深思熟虑的

我想到了一些解决方案,但不确定它们将如何影响负载,也不确定哪一个方向是最佳方向: 取消对范围的保护并重新进行保护,授予编辑权限并将其删除。使用java脚本,而不是内置的受保护范围功能。这似乎是不可能的,但即使脚本是从我的帐户运行的,也可以正常工作(工作簿都是从我的帐户设计的,但我有对受保护范围的编辑权限)

任何帮助都将不胜感激,提前谢谢

脚本的背景:
我有公司内特定项目的工作手册,还有一个主工作簿,可以通过两种方式同步。有一个查找键,简单地说就是特定于设施/功能的标题,因此我有一个脚本,允许同时更新两个位置。我还有一个新功能的模板,或者特定于设施的项目都有自己的模板,我需要用户能够在这些工作簿中添加新的工作表,并使用这些数据更新用于各种查询的主工作簿“AllTasks”工作表,但在这两个工作簿中,我都需要有受保护的范围。

只有当您将脚本部署为web应用程序时,才能从您的帐户运行脚本。用户将转到单独的URL、填写表单、提交等,只要脚本在您的帐户下运行(部署为web应用时有此选项),它将插入/更新受保护的范围,因为您具有编辑权限。用户仍然可以单独进入工作簿并向其中添加工作表(只要他们有编辑权限),除非他们对受保护的范围有单独的权限,否则他们无法触及这些范围


但是如果用户直接从电子表格中运行这些脚本,我认为不可能从您的帐户中运行。但我认为以上是最好的解决办法。我看不到任何脚本可以取消保护/保护范围,但无论如何,只有工作表。

如果只需要防止意外编辑,您可以设置数据验证规则。然后,UI脚本可以在编辑之前调整这些数据验证规则

var allowedText=“是”
var cell=SpreadsheetApp.getActive().getRange('A1');
var rule=SpreadsheetApp.newDataValidation().requireTextEqualTo(allowedText.build();
cell.setDataValidation(规则);
cell.setValue(allowedText)


这不会防止恶意,也不会防止隐藏、取消隐藏、删除或添加单元格或删除单元格内容,但会防止意外覆盖单元格。

感谢您的回复,我想对我来说,我可能只是复制隐藏列,如果列==#将列还原为隐藏列值。。。。不完全喜欢它,但我认为它会为我的目的工作。你可以使用运行在edit上的可安装触发器-请参阅可能的副本