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
当您不在其中传递任何数据时,它会产生无穷大。这意味着,如果您使用我的代码,您已经选择了一个包含空行的范围。目标工作表是空的,为了帮助复制问题,我认为最好共享一些代码。我把我现在的问题附加到第一个问题上!