繁体   English   中英

GAS:如何修改这段代码以仅更改为空的单元格值?

[英]GAS: how to adapt this piece of code to change cell value only if it's empty?

我编写了一个函数,该函数从电子表格的原始文本中提取一些所需的信息,并将其放在其他列中。 但我只想在该列为空时使用此函数(因为如果不为空,是因为其值是手动更新的)。 我尝试使用下面的代码,但是我发现s.getRange(2, 8, output.length, 1).getValue()不会告诉我给定的单元格是否为空。 那么,鉴于下面的代码,我该如何实现?

var output = [];
   for (var i = 0; i < input.length; i++) {
     output.push([ findDate(input[i][0], 'myKeyWord:', -4, -3) ]);
     Logger.log("s.getRange(2, 8, output.length, 1).getValue() = " + s.getRange(2, 8, output.length, 1).getValue())
     if(s.getRange(2, 8, output.length, 1).getValue()){
        s.getRange(2, 8, output.length, 1).setValues(output); // 8 is col H
     }

如果我正确理解了您的用例,则可以使用以下条件,它将检查单元格中是否有值(并且还可以防止单元格中任何空间的意外出现(有些人习惯于将白色单元格中的空格以删除内容而不是清除单元格)

 if(s.getRange(2, 8, output.length, 1).getValue().toString().replace(/ /g,'').length > 0){
 ...
 }

编辑:以下@sscholefield评论:

当回答这个问题时,我确实很犹豫,想知道您是否必须检查列或单个单元格...因为在谈论手动编辑单元格的地方,我选择了单个单元格,但看来我可能错了...

如果你想检查整列是空的,你可以修改代码和替换getValue()getValues() ...诅咒这会不会是在比较充足,在这种情况下,想法是比较数组长度与“展平”数组的长度,如果为空(长度= 3),则后者类似于",,," ,并且同一示例的数组长度为[[],[],[],[]] (长度= 4)。

如您所见,我们有一个可以捕捉的长度差。

请告诉我们这是否可以解决问题。

我建议使用记录器来准确查看您要比较的内容并做出相应的决定。

注意: 顺便说一句,谢谢您的客气,写书是我正在认真考虑的事情,但是现在它仍然是一个项目,应该保密(哈哈... ;-)什么?互联网 ? 我的天啊 ! 没意识到...)

我无法发表评论,因此我需要在这里写下,但是它更多的是观察,而不是答案,并且与Serge的角度略有不同。

根据'output.length'的值,您要获取一个多行数组,但是您使用getValue()而不是getValues()仅从该范围的左上角单元格返回单个值。 这是您所期望的吗?

如果需要检查整个列是否为空,最好使用getValues()对该列创建一个数组,然后检查该数组的长度是否为零(对于标题,请记住为-1)。

不幸的是,这将意味着两阶段检查if(array.length-1!= 0),因为您必须迭代检查是否array [i] ==''(空白)。 如果找到空格,则可以清除()范围或更改数组,然后使用setValues()将其放回到列中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM