我需要计算下拉框一旦改变就会发生变化的次数,例如苹果橙子、苹果葡萄苹果橙子、苹果橙子、苹果橙子
4个苹果,4个桔子,1个葡萄
发布于 2019-11-11 00:22:55
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://stackoverflow.com/questions/58788766
复制相似问题