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

Google Sheets/Script OneEdit更改两张工作表

耿俊彦
2023-03-14

我一直在努力为锻炼日历做一个脚本。这个想法是在不同的标签上有两个版本;一个是日期/日期和锻炼的列表,另一个是传统的日历视图。

我遇到的挑战是扩展日历的选项,如果选中复选框,取消隐藏隐藏行。对于“日程”视图,我已经能够让它工作,但是我不能让它在日历视图的单独工作表上工作。如果可能的话,我希望一个onEdit操作来更改两个工作表。

这就是我当前所在的位置:日程表选项卡上H2中的复选框是触发器。如果未选中,则隐藏第97-124行,如果选中该框,则显示该行。下面是成功的代码,基于我在stackoverflow问题中修改的内容。

function onEdit(e) {
  var sheet = e.range.getSheet();
  if (sheet.getName() !== 'Schedule') return; 
  if (e.range.getColumn() !== 8) return;
  if (e.value == 'TRUE') {
    switch (e.range.getRow()) {
      case 2:
        sheet.showRows(97,28);
        break;
    }
  } else {
    switch (e.range.getRow()) {
      case 2:
        sheet.hideRows(97,28);
        break;
    }
  }
};

但是我不能让它影响第二张日历。默认情况下,有三个月是可见的,然后根据日期的变化显示隐藏行1-2个月。单元格C1中有一个反映月数的公式(第1行最终将被隐藏),但我还没有找到一种方法让代码在公式的结果上触发。使用这个链接中的代码,我已经能够通过手动输入我想要显示的月数来获得想要的结果,但这是我试图避免的额外步骤。(我知道我可以通过将隐藏行“计算日期”移动到工作表的顶部,使其更易于管理,以便更简洁地显示行/隐藏视图;布局是在我决定尝试自动化工作表之前完成的)。

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  if( activeSheet.getName() == 'Calendar' ) {
    var activeRange = ss.getActiveRange();
    var activeRow = activeRange.getRow();
    var activeColumn = activeRange.getColumn()
    if( activeColumn == 3 && activeRow == 1 ) {
      if ( activeRange.getValue() == '3' )
        activeSheet.hideRows(65,42);
      if ( activeRange.getValue() == '4' )
        activeSheet.showRows(65,21);
        activeSheet.hideRows(66,1);
        activeSheet.hideRows(69,1);
        activeSheet.hideRows(72,1);
        activeSheet.hideRows(75,1);
        activeSheet.hideRows(78,1);
        activeSheet.hideRows(81,1);
        activeSheet.hideRows(84,1);
        activeSheet.hideRows(86,21);
      if ( activeRange.getValue() == '5' )
        activeSheet.showRows(65,42);
        activeSheet.hideRows(66,1);
        activeSheet.hideRows(69,1);
        activeSheet.hideRows(72,1);
        activeSheet.hideRows(75,1);
        activeSheet.hideRows(78,1);
        activeSheet.hideRows(81,1);
        activeSheet.hideRows(84,1);
        activeSheet.hideRows(87,1);
        activeSheet.hideRows(90,1);
        activeSheet.hideRows(93,1);
        activeSheet.hideRows(96,1);
        activeSheet.hideRows(99,1);
        activeSheet.hideRows(102,1);
        activeSheet.hideRows(105,1);
    }
  }
};

任何帮助,甚至确认onEdit不会影响多张工作表,都将不胜感激!

共有1个答案

那开济
2023-03-14

onEdit简单触发器可以影响多张工作表。它有几个限制,包括30秒的执行时间限制。裁判。https://developers.google.com/apps-script/guides/triggers

由于hideRows是一个缓慢的操作,并且您的脚本中有多个,因此解决方案可能是使用一个可安装的触发器。

 类似资料:
  • 我有一个谷歌电子表格,有两张表格,人 如果人员B栏中的单元格与公司A栏中的单元格中的文本匹配,那么我需要将公司B栏的内容添加到人员C栏中 之前的人物表: 公司表: 人员名单如下: 我一直试图使用Stackoverflow上其他地方找到的匹配脚本,但没有成功: 我真的被困住了,知道吗?提前感谢您的任何帮助。

  • 我只希望脚本在“Trip 1”到“Trip 3”的工作表上运行。 这是我正在使用的脚本:

  • 我正在编写一个简单的python程序来连接和显示来自Postgres表的结果,这是在AWS RDS上。我在公共架构中有表mytest。 但这会引发一个错误

  • 我有一个工作簿,有7张工作表,但只有6张数据。所有这7张表都有相同的结构/标题,只是最后一张表(表7)是空白的。 我想编写一个代码,将A2:J15范围内的表1-6的内容复制到表7工作表中。我目前有一个代码,我一直在使用,以测试,看看它是否工作,但代码我只有副本和粘贴从一个工作表仅(见下文)。有什么建议吗? 在下面的工作表中,我有两个工作表,我希望数据来自其中,另一个是目标工作表,我希望数据去那里:

  • 问题内容: 在我的Jenkins仪表板上,我有四个工作。 是否可以更改这些作业的显示顺序? 谢谢 问题答案: Jenkins默认情况下按升序对作业进行排序。1,2,3,A,b,c等。但是,您可以使用此仪表板插件来提供更接近您所需要的内容 https://wiki.jenkins- ci.org/display/JENKINS/Dashboard+View 此外,还有一个插件可以根据优先级对队列中的

  • 问题内容: 我有一些Resque工作者使用Rails应用程序。看来我最多只能同时运行2个工人(应用程序在生产Apache的EC2上运行)。有什么办法可以提高这个限制? 编辑: 我在redis.conf中有maxclients 0 我可以通过rake来启动10个工作程序,但是当他们实际上正在排队时,我在浏览器中得到“ ERR最大到达客户端数”。 编辑:更新的错误(在原始文件中是正确的) 编辑:实际上