首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算下拉菜单的数量

计算下拉菜单的数量
EN

Stack Overflow用户
提问于 2019-11-10 20:40:14
回答 1查看 33关注 0票数 0

我需要计算下拉框一旦改变就会发生变化的次数,例如苹果橙子、苹果葡萄苹果橙子、苹果橙子、苹果橙子

4个苹果,4个桔子,1个葡萄

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-11 00:22:55

onEdit()触发器仅在用户进行更改时触发。因此,如果您的onEdit()函数针对的是一个具有验证的范围,那么发生的任何触发器都表示发生了更改。那就数一数。您可以将计数存储在另一个工作表中,甚至可以存储在PropertiesService中。根据您针对它们的方式,您可以将它们存储在反映其范围的属性键中。

下面是一个可安装的onEdit()的简单示例,它检查验证规则标准为VALUE_IN_LIST或VALUE_IN_RANGE的单元格中的更改。

代码语言:javascript
运行
复制
function onMyEdit(e) {
  var sh=e.range.getSheet();
  //e.source.toast('Got Trigger');
  if(sh.getName()!="Sheet1")return;
  checkForValidations(e);
}

function onOpen() {
  SpreadsheetApp.getUi().createMenu('My Menu')
  .addItem('Display Counts', 'displayScriptProperties')
  .addItem('Create Installable Trigger', 'createTrigger')
  .addItem('Remove All Properties','removeAllScriptProperties') 
  .addToUi();
}


function checkForValidations(e) {
  //e.source.toast('Checking');
  var rg=e.range;
  var sh=e.range.getSheet();
  var row=e.range.rowStart;
  var col=e.range.columnStart;
  var vA=rg.getDataValidations();
  var ps=PropertiesService.getScriptProperties();
  for(var i=0;i<vA.length;i++) {
    for(var j=0;j<vA[i].length;j++) {
      var rule=vA[i][j];
      if(rule!=null) {
        var criteria = rule.getCriteriaType();
        if(criteria==SpreadsheetApp.DataValidationCriteria.VALUE_IN_LIST || criteria==SpreadsheetApp.DataValidationCriteria.VALUE_IN_RANGE) {
          var loc=Utilities.formatString('%s', sh.getRange(i+row,j+col).getA1Notation());
          e.source.toast(loc);//you can remove this
          if(ps.getProperty(loc)) {
            ps.setProperty(loc,parseInt(ps.getProperty(loc))+1);
          }else{
            ps.setProperty(loc,1);
          }
        }
      }
    }
  }  
}

function displayScriptProperties() {
  var ps=PropertiesService.getScriptProperties();
  var lObj=ps.getProperties();
  var html="";
  for(var key in lObj) {
    html+='<br />' + key + ' = ' + lObj[key];
  }
  var userInterface=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, "Script Properties");
}

function createTrigger() {
  if(!isTrigger('onMyEdit')) {
    ScriptApp.newTrigger('onMyEdit').forSpreadsheet(SpreadsheetApp.getActive()).onEdit().create();
  }
}

function isTrigger(funcName){//prevents multiple triggers from being created
  var r=false;
  if(funcName){
    var allTriggers=ScriptApp.getProjectTriggers();
    for(var i=0;i<allTriggers.length;i++){
      if(funcName==allTriggers[i].getHandlerFunction()){
        r=true;
        break;
      }
    }
  }
  return r;
}

function removeAllScriptProperties() {
  var resp=SpreadsheetApp.getUi().alert("Are you sure that you wish to delete ALL SCRIPT Properties?", SpreadsheetApp.getUi().ButtonSet.YES_NO)
  if(resp==SpreadsheetApp.getUi().Button.YES) {
    var ps=PropertiesService.getScriptProperties();
    ps.deleteAllProperties();
  }
  return;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58788766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档