序列号自动生成基于 Google 电子表格中的两个条件

Auto generation of serial no. based on two criteria in Google Spreadsheet

如果C列有单词"Matured",并且D有一个有效日期,那么E列中的公式应该自动生成一个序列号,比E列中先前存在的序列号高一个。

这是 link 到 Google 电子表格共享并填充了示例数据:

https://docs.google.com/spreadsheets/d/1XdcKbxKvIOSFK37zwULZns6giE9ounHPS5iHrRFkvIk/edit#gid=1992300894

不用说,状态会在不同的日期从 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;
}