Javascript 确定包含空单元格的列范围中的最后一行-Google工作表

Javascript 确定包含空单元格的列范围中的最后一行-Google工作表,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我在创建一个函数来查找数据在指定范围内的最后一行时遇到问题,在本例中,我有在列a:K中移动的数据,以及在L:Z中使用该数据的函数。我想将数据粘贴到范围A:K的第一个空行中。我尝试使用在特定列中查找第一个空行的解决方案: var Avals = ss.getRange("A1:A").getValues(); var Alast = Avals.filter(String).length; 但这对我来说不是一个可行的解决方案,因为一行中可能有空的第一个值,我需要将它粘贴到特定

我在创建一个函数来查找数据在指定范围内的最后一行时遇到问题,在本例中,我有在列
a:K
中移动的数据,以及在
L:Z
中使用该数据的函数。我想将数据粘贴到范围
A:K
的第一个空行中。我尝试使用在特定列中查找第一个空行的解决方案:

var Avals = ss.getRange("A1:A").getValues();
var Alast = Avals.filter(String).length;
但这对我来说不是一个可行的解决方案,因为一行中可能有空的第一个值,我需要将它粘贴到特定的范围内。我尝试过使用
getLastRow
getDataRange
方法,但它们都不满足要求。

目标: 您希望找到特定列范围的最后一行,其中一些列可能包含空单元格,甚至整列可能完全为空

说明:
  • 选择要标识最后一行内容的所需列范围

  • 列,用于获取此特定列的数据

  • 列的数据数组,以便您可以查看第一个非空单元格的数据(向后开始)

  • 从工作表中的最大行数中扣除该行,它将为您提供最后一行,其中包含选定范围内每列的内容。将所有这些值都添加到一个数组中

  • 此数组的值将是包含选定范围内容的最后一行

代码段: 遍历列
A:K
,找到每列的最后一行,然后计算最大最后一行:

function findLastRow() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName('Sheet1');
  const data = sh.getRange("A:K").getValues();
  const mR = sh.getMaxRows();
  const indexes = [];
  data[0].forEach((_,ci)=>{
   let col = data.map(d => d[ci]);
   let first_index = col.reverse().findIndex(r=>r!='');
   if(first_index!=-1){
      let max_row = mR - first_index;
      indexes.push(max_row);
   }
  });
  last_row = indexes.length > 0 ? Math.max(...indexes) : 0;
  console.log(last_row);
}
然后可以从
最后一行+1开始粘贴

代码片段示例表:

假设我们要查找范围
A:K
中的最后一行,其中某些列可能包含空值,另一列的最后一行包含工作表中的内容。在下面的示例表中,正确答案应该是
27

优势:

与此不同,此解决方案的工作原理是:

  • 即使范围中的任何列包含空值(或完整列为空)

  • 对于单列或列范围

缺点:


对于大量的列,它可能会很慢。尽管
GAS
API调用的数量处于尽可能低的水平,但仍有许多
JavaScript
函数调用被反复使用。

这是否回答了您的问题@tripleee我更改了标题,以区分OPs问题与您所指的重复问题。后者有两个限制:它只考虑
1
列(这里OP要求一系列列),而且这些列可以有空单元格。您提到的重复问题的公认答案取决于以下事实:该列在最后一行内容之前没有空单元格。是的,非常感谢!这几乎是我所需要的完美解决方案,唯一的问题是,如果所有行都是空的,就像第一次移动数据一样,它仍然默认为工作表中的最后一行。@David-很抱歉不方便,请再次检查我的答案!)一点也不用担心&最好还是谢谢你的帮助!但是,现在这个脚本的最后一行被记录为'-Infinity',因此当我在脚本中实现它时,它会抛出错误:根据这个
max
当您不在其中传递任何数据时,它会产生无穷大。这意味着,如果您使用我的代码,您已经选择了一个包含空行的范围。目标工作表是空的,为了帮助复制问题,我认为最好共享一些代码。我把我现在的问题附加到第一个问题上!