google-apps-script - 为什么我的共享用户不能使用我在 Google 表格中写入的脚本?
问题描述
我制作了一个用于工作跟踪的 Google 表格。一旦将字段输入特定单元格,我编写了一个脚本来隐藏某些行。
这是脚本:
function myFunction() {
}
function onEdit(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName("PRODUCTION TRACKER"); // Enter sheet name
var row = s.getRange('AK:AK').getValues(); // Enter column letter that has
//the text "hide" and "unhide"
s.showRows(1, s.getMaxRows());
for(var i=0; i< row.length; i++){ if(row[i] == 'YES') { s.hideRows(i+1, 1); } //Value to hide
}}
这很简单,对我来说效果很好。但为什么它不适用于我的共享用户?该脚本是在单元格具有特定值时自动完成的,它不是按钮或任何东西。
解决方案
解释:
您的代码似乎与您在最后一条评论中给出的描述不符。基本上,这就是您的代码的作用:
对于每个单元格编辑,它会显示所有行,即使它们以前被隐藏,然后脚本会重新检查 AK 列中的每一行的值“YES”,并一一隐藏这些行。
给定您的用例,脚本可以执行很多工作表更改,即hideRows(i+1,1)
每个单元格编辑。工作表更改非常缓慢,并且会极大地影响执行时间。
您可能已达到90 分钟/天的触发器配额。也许不在您的帐户中,而是在您的共享用户中。
解决方案:
除非需要这种特定行为,否则您可以通过利用函数中的事件对象来优化代码:
function onEdit(e) {
var s = e.range.getSheet();
if (s.getName() == "PRODUCTION TRACKER" &&
e.range.getColumn() == 37 &&
e.value == "YES") {
s.hideRows(e.range.getRow());
}
}
请注意,您仍然可以使用原始代码,但不能在触发器中使用。
推荐阅读
- r - 在 deSolve 中延迟参数值/流入和流出速率
- azureservicebus - PeekLock Microsoft Azure 服务总线
- c# - 如何将依赖项注入 signalR 核心的集线器构造函数?
- c# - 来自 API 的多种返回类型
- json - Google Cloud Text-to-Speech 返回“INVALID_ARGUMENT”
- java - 如何在 Android 9 上制作应用程序支持
- pyspark - 属性错误:“datetime.timedelta”对象没有属性“_get_object_id”
- php - 如何使唯一数组的自定义验证规则依赖于其他字段 laravel
- java - 如何使用 JDBCIO (apache beam) 执行存储过程/例程
- javascript - 更新提交事件中的值后未提交隐藏输入