【问题标题】:Is it possible to trigger on cell selection in Google sheets script?是否可以在 Google 表格脚本中触发单元格选择?
【发布时间】:2019-11-01 16:45:03
【问题描述】:

我正在尝试获取一个包含很多列的电子表格,以根据当前选定的单元格/列隐藏其中的一些列。

示例:假设列 C-R 被分组为 3(C-D-E、F-G-H、...)。除非选择了组中的单元格,否则我只想查看每个组中的第一列。如果选择了 F、G 或 H 列中的单元格,我想查看这些列。

|__A__|__B__|__C__|__F__|__G__|__H__|__I__|__L__|__M__|__P__|

现在我有了一个可以隐藏和显示组的脚本,但是我需要找到一种方法来触发该功能。我发现最接近的方法是触发onChange,但这需要单元格中发生变化,我希望选择足够。

function onSelect(){
  code for cell check and showing and hiding columns here.  
}

关于如何实现这样一个触发器的任何想法?

【问题讨论】:

  • 是的,您可以使用触发器 onEdit() 然后说如果在编辑时编辑的单元格是...然后...
  • 您不能使用 onEdit() 来选择单元格,但可以使用 来检测单元格的实际编辑。但是,如果您在这些单元格中放置复选框,则只需单击一下即可检测到该单元格。看看这个问题:stackoverflow.com/questions/58662000/…
  • @Cooper,谢谢你的提示,问题是我所有的单元格都包含数据,所以它们不能是复选框。我将不得不接受这不是我可以通过当前 API 获得的功能。
  • 拥有像 Excel 这样的驻留在您计算机上的工具绝对有一些优势,可以完全满足您的需求。另一方面,我也喜欢 google 提供了各种各样的工具和 API,这些工具和 API 允许我通过 Google 应用程序脚本将许多功能集成到一个独特的包中。而且我愿意理解,必须对该界面的某些方面进行限制,以便他们的计算机可以同时支持每个人的需求。我已经能够构建几个有用的网络应用程序,这些应用程序极大地改善了我的生活。
  • 您可以使用2020年4月推出的新onSelectionChange()事件。详细答案已发布here

标签: google-apps-script triggers


【解决方案1】:

当前,选择或单击单元格(像onlicked或Onselected函数的内容)时,没有触发器,作为替代方法,您可以添加到您已经拥有的组,每个第一列的第一行复选框您的组,然后当它们被按下时,您可以触发onEvent(e) 以显示隐藏的列。

要添加新的第一行,请右键单击左侧数字列中的“1”,然后选择“在上面插入一个”

要添加一个复选框,选择你想要的单元格,然后点击插入 -> 勾选框

现在您可以像这样使用 onEvent(e)

function onEdit(e){
  // get the number of the column. E.g: C = 3
  Logger.log(e.range.getColumn());
  /* 
     Then you would be ready to apply the logic you made 
     about hiding and showing columns
  */
}

【讨论】:

  • 感谢您的提示,但我认为当您有组时,显示在列标题上方的内置展开/折叠按钮是一种更好的方法。也许在未来的版本中会有一个 onSelect 触发器,但在那之前我认为那个按钮会起作用。
【解决方案2】:

这仅作为一种替代方法,首先触发,您复制并粘贴到 c 列的同一单元格中,然后接下来,您必须使用类似的方法,您必须复制并粘贴到您将编辑的列中的同一单元格中:

function onEdit()
{
  var spreadsheet = SpreadsheetApp.getActive();
  var mysheet=spreadsheet.getSheetByName('MainSheet');

  var ctRangeCount=(mysheet.getRange("T1").getColumn()-mysheet.getRange("C1").getColumn()+1)/3;
  for (a=0;a<ctRangeCount;a++)
  {
    mysheet.hideColumns(a*3+3+1,2);

    if(mysheet.getCurrentCell().getColumn()==a*3+3)
    {
      mysheet.showColumns(a*3+3+1,2);//hideColumns(a*3+3+1,2);
    }
  }
}

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    相关资源
    最近更新 更多