如果另一列中的单元格使用 google 应用程序脚本有一些数据,如何在一列中获取行号?

how to get a row number in a column if a cell in another column has some data using google apps script?

我有一个 sheet,它有 5 列(日期、ID、名称、编号、行号),我希望第五列(行号)在我插入时自动填充行号第二列中的任何数据(id) 我尝试了 sheet 本身的手动方式,而不是应用程序脚本,但有时它会被错误删除,所以我想用应用程序脚本来做,我不确定是否有办法,所以请帮助我。这是我在示例中的意思:

第一行得到 headers(日期、ID、名称、编号、行号) 假设我在第五行插入一些数据(今天,4,ahmed,4584231,X

我想当我插入 ID(4) 时,行号自动获得值 (5) 因为它在第五行,然后在我删除第 3 行之后,我想要该行中的所有值NUMBER COLUMN TO BE CHANGED TO THE NEW ROW IT GOT IN,我希望这对你来说很清楚。

非常感谢

这可以通过公式实现:

  1. 如果不为空

在行号列中插入此公式:

=if(B2<>"",row(),"")

结果:

只需 drag/copy 公式到列。

这将检查 B 列中的单元格是否为空白。如果不是,请插入行号。

  1. ArrayFormula - 这很可能是您需要防止意外删除的内容

或者您也可以使用 arrayFormula,这样您只需在 header 之后的第一行插入公式,它就会应用于整列:

=arrayformula(if(B2:B <> "", row(B2:B), ""))

这也可以帮助您防止意外删除。它会在删除时重新插入单元格上的值,只需确保不要删除单元格 E2 上的实际 arrayformula。

还要检查下面的单元格是否为空,否则会引发错误。

结果:

使用应用程序脚本

function onEdit(e) {
  var ss = e.source.getActiveSheet();
  var r = e.source.getActiveRange();
  var row = r.getRow();
  var column = 6;

  if (r.getColumn() == 2) {
    if (!e.value){
      ss.getRange(row,column).clearContent();
    }
    else {
      ss.getRange(row,column).setValue(row);
    };
  };
};

参考文献: