如何在谷歌工作表中使用数组公式时使用getLastRow.我可以让它忽略一列吗

How to use getLastRow when using an array formula, in google sheets. Can I have it ignore a column?

本文关键字:一列 我可以 工作 谷歌 数组 getLastRow      更新时间:2023-09-26

我在谷歌工作表中使用以下公式。它工作得很好,只是我发现getLastRow不起作用,因为我在M-P列中使用数组公式。

我该怎么绕过这个?是否可以让getLastRow忽略这些列?

链接到测试表。

function onEdit(event) {
  // assumes source data in sheet named Needed
  // target sheet of move to named Acquired
  // test column with yes/no is col 4 or D
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if(s.getName() == "Open" && r.getColumn() == 9 && r.getValue() == "Yes") {
    var row = r.getRow();
    var numColumns = s.getLastColumn()-2;
    var targetSheet = ss.getSheetByName("Closed");
    var target = targetSheet.getRange(targetSheet.getLastRow()+1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
    s.insertRowAfter(29);
    var cell = s.getRange("H30");
    cell.setFormula("=IF(LEN(C30),MINUS(G30,TODAY()),)");
  }
}

从链接到测试表,关闭!M1是

={"Audit - Resp. Days Left";ARRAYFORMULA(IF(LEN(F2:F),MINUS(F2:F,I2:I),))}

上面的公式返回一个与Closed工作表高度相同的数组,这使得getLastRow返回的值与maxRows相同。

为了保持公式和脚本不变,一种选择是删除"关闭"工作表中的空白行。

另一种选择是将M1中的闭表公式更改为P1,以仅返回所需的行。一种方法是使用FILTER函数,而不是ARRAYFORMULA和IF函数,即,对于M1

={"Audit - Resp. Days Left";FILTER(MINUS(E2:E,H2:H),LEN(E2:E))}

要做到这一点,一定要清除空白行的内容。

或者,您可以创建一个助手函数来检查作为参数传入的列中的最后一行。

function getLastRowInColumn(sheetObj, range) {
return sheetObj.getRange(range)
        .getValues().filter (String).length
}

您可以在脚本中调用此函数(请参见"var-lr"行)

function onEdit(event) {
var s = event.source.getActiveSheet();
if(s.getName() == "Open" && event.range.columnStart == 9 && event.value == "Yes") {
var targetSheet = event.source.getSheetByName("Closed");
var lr =  getLastRowInColumn(targetSheet, 'C:C')
var target = targetSheet.getRange(lr+1, 1);
s.getRange(event.range.rowStart, 1, 1, s.getLastColumn()-2).moveTo(target);
s.deleteRow(event.range.rowStart);
s.insertRowAfter(29);
var cell = s.getRange("H30");
cell.setFormula("=IF(LEN(C30),MINUS(G30,TODAY()),)");
   }
}
相关文章: