google-apps-script - 谷歌表:如何匹配空值?
问题描述
在工作表中,我有未知数量的值的行,因为这些值来自用户输入。例如,在第 2 行中有 B2、C2、D2 中的值;在第 3 行中,只有 B3 中的值;在第 4 行中有 B4、C4、D4、E4、F4 中的值。A 列是 ID,因此与此问题无关。我想在像这样的函数中获取这些值
function getRowValues(row){
....
}
在我的实际情况下,有价值的单元格之间不会有空白单元格,所以我认为我只需要找到一行中的第一个空单元格,然后
getRange
相应地使用。我试过了match("",B2:2)
,match(null,B2:2)
它们都返回错误。那么 match 不能用来匹配 NULL 值吗?我可以想到其他方法来做到这一点,比如isblank
在范围内循环,我也可以做hlookup
orfilter
,但由于我必须对整行运行这个函数,我担心它们会非常消耗资源,因此不是很良好做法。这种担忧是否有根据?仅出于学习目的,如果我在有价值的单元格之间确实有空白单元格,那么在一行中仅获取非空白值的最佳方法是什么?
解决方案
至于第二个问题,我认为这是一种很方便的方式:
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)
}
推荐阅读
- python - 如何从 python 中的文本文件中选择和打印数据?
- python - 无法对 Pandas 数据框中同名的列执行函数
- python - “从文件导入类”也尝试导入其他类
- javascript - 如何在节点js中将异步转换为同步
- python - Python:拟合线来计算我的数据的减少部分(最大值到最小值)并推断它们(最大值到最大值)?
- c# - 将数据从一列转移到同一张表中的另一列
- rust - IntoHandlerError 未针对列为已实现的类型实现
- python - Wordnet:获取单词的派生相关形式
- discord.js - 如何从我的不和谐机器人中删除代码?
- eclipse - 在 Eclipse 中运行机器人测试用例 - 找不到输出控制台