首页 > 解决方案 > 谷歌表:如何匹配空值?

问题描述

在工作表中,我有未知数量的值的行,因为这些值来自用户输入。例如,在第 2 行中有 B2、C2、D2 中的值;在第 3 行中,只有 B3 中的值;在第 4 行中有 B4、C4、D4、E4、F4 中的值。A 列是 ID,因此与此问题无关。我想在像这样的函数中获取这些值

function getRowValues(row){
 ....
}
  1. 在我的实际情况下,有价值的单元格之间不会有空白单元格,所以我认为我只需要找到一行中的第一个空单元格,然后getRange相应地使用。我试过了match("",B2:2)match(null,B2:2)它们都返回错误。那么 match 不能用来匹配 NULL 值吗?我可以想到其他方法来做到这一点,比如isblank在范围内循环,我也可以做hlookupor filter,但由于我必须对整行运行这个函数,我担心它们会非常消耗资源,因此不是很良好做法。这种担忧是否有根据?

  2. 仅出于学习目的,如果我在有价值的单元格之间确实有空白单元格,那么在一行中仅获取非空白值的最佳方法是什么?

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-formula

解决方案


至于第二个问题,我认为这是一种很方便的方式:

var arr1 = ["a", 1, "", , "b", 3];

var arr2 = arr1.filter(String);

console.log(arr2); // output: [ 'a', 1, 'b', 3 ]

如果您不需要记住哪个元素属于哪个列。

可能这个技巧也是您第一个问题的答案。像这样的东西:

function getRowValues(row) {
    return row.getValues().flat().filter(String);
}

range.getValues()但最佳做法是通过二维数组获取所有行并处理数组,而不是从每一行获取值:

function main() {
  var sheet    = SpreadsheetApp.getActiveSheet();
  var range    = "B1:Z5";
  var data_raw = sheet.getRange(range).getValues();
  var data     = data_raw.map(row => row.filter(String));
  Logger.log(data)
}

推荐阅读