首页 > 解决方案 > 为什么我的共享用户不能使用我在 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
 
}}

这很简单,对我来说效果很好。但为什么它不适用于我的共享用户?该脚本是在单元格具有特定值时自动完成的,它不是按钮或任何东西。

标签: google-apps-scriptgoogle-sheets

解决方案


解释:

您的代码似乎与您在最后一条评论中给出的描述不符。基本上,这就是您的代码的作用:

对于每个单元格编辑,它会显示所有行,即使它们以前被隐藏,然后脚本会重新检查 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());
  }
}

请注意,您仍然可以使用原始代码,但不能在触发器中使用。


推荐阅读