【问题标题】:Using onEdit installable trigger, how do I call a function when a specific value is selected in any of a range of cells(all with dropdowns)?使用 onEdit 可安装触发器,当在任何单元格范围内选择特定值(全部带有下拉菜单)时,如何调用函数?
【发布时间】:2020-04-14 22:20:07
【问题描述】:

我在工作表中有一系列单元格,其中包含下拉值列表。 我已经设置了一个可安装的触发器来使用 onEdit。 我编写了简单的函数来在侧边栏中调用不同的谷歌表单,具体取决于下拉列表中选择的值。

单元格范围:J4:P20 每个单元格都有一个下拉菜单,其中包含三个选项 A、B 和 C 如果我选择 A,我想调用将加载侧边栏 A 的函数 A 如果我选择 B,我想调用函数 B,它将加载侧边栏 B 等

边栏已创建。

我只需要一个完整的 onEdit 函数示例,该函数将调用侧边栏 A、B 或 C,具体取决于在指定范围的每个单元格的每个下拉列表中选择的值。

这是我可怜的伪尝试。

function onEdit(e) {
  var ss = SpreadsheetApp.getActive()
  var sheet = SpreadsheetApp.getActiveSheet()
  var values = sheet.getRange("J4:P20").getValues();
  Logger.log(values);
  var cellContent = values.getValue()
  if cellcontent = SQL {
   loadsqlSideBar();
  }
  else if cellcontent = ORACLE {
   loadoracleSideBar();
  }
  else if cellcontent = IMANIS {
   loadimanisSideBar();
  }
}



function loadsqlSideBar()
{
  var userInterface=HtmlService.createHtmlOutputFromFile('sql');//sidebar for html and formBar for form
  SpreadsheetApp.getUi().showSidebar(userInterface);
}

function loadoracleSideBar()
{
  var userInterface=HtmlService.createHtmlOutputFromFile('oracle');//sidebar for html and formBar for form
  SpreadsheetApp.getUi().showSidebar(userInterface);
}


function loadimanisSideBar()
{
  var userInterface=HtmlService.createHtmlOutputFromFile('imanis');//sidebar for html and formBar for form
  SpreadsheetApp.getUi().showSidebar(userInterface);
}

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:
    function onEdit(e) {
      if(e.value=='SQL') loadsqlSideBar();
      if(e.value=='ORACLE') loadoracleSideBar();
      if(e.value=='IMANIS') loadimanisSideBar();
    }
    

    【讨论】:

    • 嗨。你在哪里定义单元格的范围?这应该只需要一个可安装的触发器吗?共有三个功能,每个侧边栏一个。如何设置将调用它们的触发器?抱歉,我正在通过示例和反复试验来解决这个问题。我不是编码员。如果您能提供更多信息,我将不胜感激。
    【解决方案2】:

    为了解决您的问题,您需要使用事件对象来监控已编辑的单元格。

    片段

    function onEditTrigger(e) {
      var cellEdited = e.range.getValue();
      if (cellEdited == "SQL") {
       loadsqlSideBar();
      }
      else if (cellEdited == "ORACLE") {
       loadoracleSideBar();
      }
      else if (cellEdited == "IMANIS") {
       loadimanisSideBar();
      }
    }
    
    
    function loadsqlSideBar()
    {
      var userInterface=HtmlService.createHtmlOutputFromFile('sql');//sidebar for html and formBar for form
      SpreadsheetApp.getUi().showSidebar(userInterface);
    }
    
    function loadoracleSideBar()
    {
      var userInterface=HtmlService.createHtmlOutputFromFile('oracle');//sidebar for html and formBar for form
      SpreadsheetApp.getUi().showSidebar(userInterface);
    }
    
    
    function loadimanisSideBar()
    {
      var userInterface=HtmlService.createHtmlOutputFromFile('imanis');//sidebar for html and formBar for form
      SpreadsheetApp.getUi().showSidebar(userInterface);
    }
    

    说明

    onEditTrigger 函数是一个可安装的触发器,这意味着一旦检测到 edit 操作,它将触发。可安装触发器和简单触发器之间的主要区别在于它们可以调用需要授权的服务,并且它们提供了更大的灵活性。无需指定范围 J4:P20,因为您将收集已编辑的单元格并检查其值是否为所需值之一。

    因此,上述脚本利用e 事件对象来检测哪个单元格已被编辑,然后根据其值加载侧边栏。

    安装触发器

    为了拥有可安装的触发器,您需要安装它。为此,您需要通过单击此图标转到项目的触发器。

    之后,您需要使用以下选项创建一个新触发器:

    注意

    也不要忘记对if 结构使用正确的方法。

    参考

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 2014-12-04
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多