当前位置: 首页 > 知识库问答 >
问题:

谷歌工作表应用程序脚本(OneEdit功能)

司浩壤
2023-03-14

在谷歌工作表上,尝试根据特定单元格中的值隐藏/取消隐藏行,并尝试在AppsScript中为此编写脚本。发现一个隔离工作(如果B55=NO,则隐藏64行):

function onEdit(e) { 
  var activeSheet = e.source.getActiveSheet(); 
  var range = e.range; 
  if (activeSheet.getName() !== 'Inputs' || range.getA1Notation() !== 'B55') return; 
  if (e.value === 'No') { 
    activeSheet.hideRows(56, 64);
  }  else if (e.value === 'Yes') { 
      activeSheet.showRows(56, 64); 
      } 
}

但我需要对多个单元格和多行使用相同的方法,只要我展开它,就只有代码的最后一部分有效,而不是第一部分:

function onEdit(e) { 
  var activeSheet = e.source.getActiveSheet(); 
  var range = e.range; 
  if (activeSheet.getName() !== 'Inputs' || range.getA1Notation() !== 'B55') return; 
  if (e.value === 'No') { 
    activeSheet.hideRows(56, 64);
  }  else if (e.value === 'Yes') { 
      activeSheet.showRows(56, 64); 
      } 
}
function onEdit(e) { 
  var activeSheet = e.source.getActiveSheet(); 
  var range = e.range; 
  if (activeSheet.getName() !== 'Inputs' || range.getA1Notation() !== 'B121') return; 
  if (e.value === 'No') { 
    activeSheet.hideRows(122, 67);
  }  else if (e.value === 'Yes') { 
      activeSheet.showRows(122, 67); 
      } 
}

从这里开始,B121号牢房开始工作,但我的B55停止工作。有什么提示吗?谢谢!

共有3个答案

左丘智渊
2023-03-14

Mike是正确的,你只能在onEdit()触发器上,但是不能像他显示的那样合并,因为如果没有找到条件,会有返回

function onEdit(e) { 
  var activeSheet = e.source.getActiveSheet(); 
  var range = e.range; 
  if (activeSheet.getName() == 'Inputs' && range.getA1Notation() == 'B55') {; 
    if (e.value === 'No') { 
      activeSheet.hideRows(56, 64);
    }  else if (e.value === 'Yes') { 
        activeSheet.showRows(56, 64); 
        } 
  }
  if (activeSheet.getName() == 'Inputs' && range.getA1Notation() == 'B121') { 
    if (e.value === 'No') { 
      activeSheet.hideRows(122, 67);
    }  else if (e.value === 'Yes') { 
        activeSheet.showRows(122, 67); 
      } 
  }
}
鲁景山
2023-03-14

已经提供了答案,但是考虑更一般的情况:

function myFooBar() { 
  console.log("the first one") 
}

function myFooBar() { 
  console.log("the second one") 
}

function doMyFooBar() {
  myFooBar();
}

运行doMyFooBar()时,控制台将显示第二个。从脚本顶部到底部读取时,函数myFooBar()的最后一个声明将替换该函数之前的任何声明。

鲁乐
2023-03-14

您需要将两个函数合并到OneEdit中,请重试

function onEdit(e) { 
  var activeSheet = e.source.getActiveSheet(); 
  var range = e.range; 
  if (activeSheet.getName() !== 'Inputs') return; 
  if (range.getA1Notation() == 'B55'){ 
    if (e.value === 'No') { 
      activeSheet.hideRows(56, 64);
    }  else if (e.value === 'Yes') { 
      activeSheet.showRows(56, 64); 
    } 
  }
  if (range.getA1Notation() == 'B121') { 
    if (e.value === 'No') { 
      activeSheet.hideRows(122, 67);
    }  else if (e.value === 'Yes') { 
      activeSheet.showRows(122, 67); 
    } 
  }
}
 类似资料:
  • 在继续使用GoogleApps脚本构建Google电子表格的过程中,我已经完成了获取Bittrex和Poloniex余额的工作,但无法使用Cryptopia。 下面是我与Bittrex将JSON对象数组映射到字符串的斗争的链接 以下是官方API链接:https://www.cryptopia.co.nz/Forum/Thread/256 以下是一些例子: https://www.cryptopia

  • 通过SpreadsheetApp global,使用绑定到电子表格的应用程序脚本来影响工作表非常简单。但是,有一些功能,例如在工作表上获取/设置过滤器,只能从GoogleSheetsRESTAPI访问。 我见过一个例子,它使用应用程序脚本中的UrlFetchApp来调用谷歌工作表应用编程接口,但它的编写方式好像应用程序脚本实际上没有绑定到特定的电子表格。 当我试图从绑定到电子表格的应用程序脚本中调

  • 我有一个电子表格从谷歌表单收集我的表单回复。 附在这张纸上的是一个脚本,它将每一行都拉出,进行一些计算,并将结果放入另一张纸中。我不是每次都复制整张表,而是用下面的代码拉两张表的增量: 问题是,我还将过滤器应用于接收工作表,并且每当我插入任何新数据时,过滤器范围都不会更新。 有什么办法可以让我绕过这件事吗?作为上面更新函数的一部分,我能否以编程方式更新过滤器范围?

  • 在下面的注释中,已解析设置薪等的代码。我们只需要看看如何返回等级就可以了。

  • 我一直在努力对我的数据进行自动排序(根据第二行第一列数据进行升序),我通过在线搜索找到了一些提示,但遇到了一个错误,似乎我无法通过网络找到答案。 下面是一个场景: 我有两张床单,一张 这是床单 这是第二张 请注意,两张表中的列lastname和code相同,不同之处在于列的性别(在下拉列表中格式化) 我发现一个脚本似乎可以工作,但我不能完全正常工作,下面是我运行脚本后的输出。 注意红色框中的列,似

  • 使用谷歌应用脚本Gmail库,当我使用函数,API似乎将过去的一个段落拆分为多个段落,可能会使用字符限制。例如,我的电子邮件中有一段写道: 但当我在电子邮件中调用此功能时,它变成: 而且,当我在一个新的行定界符上拆分电子邮件文本,并进行一些清理,以使用我的输出创建一个数组时,我最终得到: 我查看了这篇Reddit帖子,它似乎处理了类似的问题。但是,我尝试了提出问题的人提出的解决方案: 但它并没有满