在 Google Sheet 中避免同一列中的日期最多出现 10 次
Avoid the same date in a column for maximum 10 times in Google Sheet
我想找到一种方法来避免在电子表格的 A 列中最多插入 10 次相同的日期,因此如果 A 列中已经有 10 次相同的日期,如果用户尝试要在同一日期插入另一个时间,将弹出一个提示,提示这是不可能的。
我正在尝试使用 Apps 脚本编写以下代码,但它仅适用于字母值而不适用于日期。
也许我需要格式化一些东西?
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');
}
}
}
参考文献:
我想找到一种方法来避免在电子表格的 A 列中最多插入 10 次相同的日期,因此如果 A 列中已经有 10 次相同的日期,如果用户尝试要在同一日期插入另一个时间,将弹出一个提示,提示这是不可能的。
我正在尝试使用 Apps 脚本编写以下代码,但它仅适用于字母值而不适用于日期。
也许我需要格式化一些东西?
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');
}
}
}