序列号自动生成基于 Google 电子表格中的两个条件
Auto generation of serial no. based on two criteria in Google Spreadsheet
如果C列有单词"Matured",并且D有一个有效日期,那么E列中的公式应该自动生成一个序列号,比E列中先前存在的序列号高一个。
这是 link 到 Google 电子表格共享并填充了示例数据:
不用说,状态会在不同的日期从 Pending 变为 Matured。
您允许所有人编辑您的电子表格吗?我希望你复制一份。
无论如何,我写了一个应该可以工作的脚本。
要使用它,请将此公式放入 E2。 =genSerials(C2:D10, 1, "Matured", 2, true)
第二个参数是包含状态的列。第三个参数是需要在状态列中的文本,后跟要排序的列,然后是 true 或 false 以指示排序顺序。
function genSerials(range, statusCol, statusText, dataToSortCol, ascending) {
statusCol -= 1; dataToSortCol -= 1;
var sorted = range.filter(function(row) {return row[statusCol] === statusText && row[dataToSortCol] !== "";}).map(function(row) {return row[dataToSortCol];});
if(ascending) {
sorted.sort(function(a,b) {if(a > b) return 1; else if(b > a) return -1; else return 0;});
} else {
sorted.sort(function(a,b) {if(a > b) return -1; else if(b > a) return 1; else return 0;});
}
var result = [];
for(var i = 0; i < range.length; i++) {
var row = range[i];
if(row[statusCol] === statusText && row[dataToSortCol] !== "") {
var idx = sorted.indexOf(row[dataToSortCol]);
result.push([idx + 1]);
} else {
result.push([""]);
}
}
return result;
}
如果C列有单词"Matured",并且D有一个有效日期,那么E列中的公式应该自动生成一个序列号,比E列中先前存在的序列号高一个。
这是 link 到 Google 电子表格共享并填充了示例数据:
不用说,状态会在不同的日期从 Pending 变为 Matured。
您允许所有人编辑您的电子表格吗?我希望你复制一份。
无论如何,我写了一个应该可以工作的脚本。
要使用它,请将此公式放入 E2。 =genSerials(C2:D10, 1, "Matured", 2, true)
第二个参数是包含状态的列。第三个参数是需要在状态列中的文本,后跟要排序的列,然后是 true 或 false 以指示排序顺序。
function genSerials(range, statusCol, statusText, dataToSortCol, ascending) {
statusCol -= 1; dataToSortCol -= 1;
var sorted = range.filter(function(row) {return row[statusCol] === statusText && row[dataToSortCol] !== "";}).map(function(row) {return row[dataToSortCol];});
if(ascending) {
sorted.sort(function(a,b) {if(a > b) return 1; else if(b > a) return -1; else return 0;});
} else {
sorted.sort(function(a,b) {if(a > b) return -1; else if(b > a) return 1; else return 0;});
}
var result = [];
for(var i = 0; i < range.length; i++) {
var row = range[i];
if(row[statusCol] === statusText && row[dataToSortCol] !== "") {
var idx = sorted.indexOf(row[dataToSortCol]);
result.push([idx + 1]);
} else {
result.push([""]);
}
}
return result;
}