如果返回时单元格为空,则删除行

时间:2018-01-30 02:48:36

标签: javascript google-apps-script google-sheets

我有一个功能(对不起,我不记得我在哪里得到它),它将一个分隔的字符串输出到一个分组的行

我需要删除目标列为空的所有行

我一直在努力但却无法得到它

感谢您的帮助

范围

ColA      ColB    ColC   
a1        b1      x\y\z
a2        b2      
a3        b3      x|z 

输出

ColA      ColB    ColC   
a1        b1      x
a1        b1      y
a1        b1      z
a2        b2      
a3        b3      x
a3        b3      z

需要

ColA      ColB    ColC   
a1        b1      x
a1        b1      y
a1        b1      z    
a3        b3      x
a3        b3      z


function groupedRow(range) {
var targetCol = 4
var output2 = [];
for(var i=0, iLen=range.length; i<iLen; i++) {
  var s = range[i][targetCol].split("|");    
  for(var j=0, jLen=s.length; j<jLen; j++) {
    var output1 = []; 
    for(var k=0, kLen=range[0].length; k<kLen; k++) {
      if(k == targetCol ) {
        output1.push(s[j]);
      } else {
        output1.push(range[i][targetCol]);
      }
  }
    output2.push(output1);
  }    
}
return output2;
}

1 个答案:

答案 0 :(得分:1)

您可能必须检查split函数的空字符串作为参数,它返回带有空字符串的数组:

['']

我必须重建代码才能获得正确的结果。

<强>代码

function groupedRow(range, targetCol) {
  var result = [];
  var row = [];
  var rowNew = [];
  var val = '';

  for(var i=0, iLen=range.length; i<iLen; i++) {
      // get the row
      row = range[i];
      // split the targetCol element
      var s = row[targetCol - 1].split("|");  
      for(var j=0, jLen=s.length; j<jLen; j++) {
        val = s[j]; 
        // if element is not empty string   
        if (val !== '')
        {
          rowNew = row.slice(); // copy the array
          rowNew.splice(targetCol - 1, 1, val); // replace n'th element 
          result.push(rowNew);
        }
      }    
    }
    return result;
    }

<强>用法

作为表格中的自定义功能:

=groupedRow(A1:C3, 3)

备注