在谷歌工作表中,在一列中最多避免10次相同的日期



我想找到一种方法来避免在电子表格的a列中最多插入10次相同的日期,因此,如果a列中已经有10次相同日期,如果用户试图插入另一个相同日期的时间,弹出窗口将提醒这是不可能的。

我正在尝试使用Apps Script编写下面的代码,但它只适用于字母值,而不适用于日期。

也许我必须格式化一些东西?

function onEdit(e) {
var r = e.range;
var s = r.getSheet();
if(s.getName()==='Foglio1' && r.getColumn()===1) {
var newValue = e.value;
var b = s.getRange('A1:A');
var bv = b.getValues();

var count = 0;
var flag = false;
for(var i=0;i<bv.length;i++) {
if(bv[i][0]===newValue)
count++;
if(count>10) {
flag = true;
break;
}
}

if(flag) {
r.setValue(e.oldValue);
SpreadsheetApp.flush();
SpreadsheetApp.getUi().alert('This date is already inserted 10 times');
} 
}
}

例如,作为一个简单的修改,按如下方式使用getDisplayValue如何?

修改的脚本1:

function onEdit(e) {
var r = e.range;
var s = r.getSheet();
if (s.getName() === 'Foglio1' && r.getColumn() === 1) {
var newValue = r.getDisplayValue();
var b = s.getRange('A1:A');
var bv = b.getDisplayValues();
var count = 0;
var flag = false;
for (var i = 0; i < bv.length; i++) {
if (bv[i][0] === newValue) {
count++;
}
if (count > 10) {
flag = true;
break;
}
}
if (flag) {
r.setValue(e.oldValue);
SpreadsheetApp.flush();
SpreadsheetApp.getUi().alert('This date is already inserted 10 times');
}
}
}

修改的脚本2:

作为其他方法,在该修改中,filter用于对值进行计数。

function onEdit(e) {
var r = e.range;
var s = r.getSheet();
if (s.getName() === 'Foglio1' && r.getColumn() === 1) {
var newValue = r.getDisplayValue();
if (newValue == "") return;
var count = s.getRange('A1:A').getDisplayValues().filter(([a]) => a === newValue).length;
if (count > 10) {
r.setValue(e.oldValue);
SpreadsheetApp.flush();
SpreadsheetApp.getUi().alert('This date is already inserted 10 times');
}
}
}

参考文献:

  • getDisplayValue((
  • getDisplayValues((
  • 筛选器((

最新更新