计算下拉列表

例如,我需要计算下拉菜单发生更改时发生更改的下拉菜单的发生次数 苹果 橘子 苹果 葡萄 苹果 橘子 橘子 苹果 橘子

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

abcd_219616 回答:计算下拉列表

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

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

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;
}
本文链接:https://www.f2er.com/3129228.html

大家都在问