用于自定义串联值的Google脚本

时间:2016-07-25 13:23:22

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

我试图独自解决问题两天,最后来到这里。

我需要在google脚本中编写一个自定义函数,它将使用某些过滤器连接范围的值(即跳过空白单元格或值等于&#34的单元格; - ")。 / p> Google工作表中的

公式应如下所示:

=concat_costum(A3:N3,"-")

结果应如下所示:

trpd-hex-phex-crfl-wi-ins-td-max_op_temp

我写了下一段代码:



function concat_costum(pRange,s){
  var out=""
  for(i=0;i<pRange.length;++i){
    var currentValue = pRange[i]
    if (!(currentValue == "-" || currentValue == "" || currentValue == "undefined")) {
      out = out+currentValue+s
    }
    
  }
  return out.slice(0,-1)
}
&#13;
&#13;
&#13;

但其输出是:

trpd,hex,phex,crfl,,-,wi,ins,td,max_op_temp,,,,

请帮助

1 个答案:

答案 0 :(得分:1)

更快的公式

自定义函数有时需要加载一段时间,而且您的问题很简单,可以使用更快的电子表格公式:

=join("-", filter(A1:A6, A1:A6 <> ""))

自定义功能

您还可以使用JavaScript内置的数组函数将其作为自定义函数执行:

function concat_custom(s, array) {
    array = conformToOneDimensionalArray(array);

    return array.filter(function (value) {
      return value != "";
    }).join("-");
}

function conformToOneDimensionalArray(value) {
  if (!Array.isArray(value)) {
    value = [value];
  }
  else if (Array.isArray(value[0])) {
    value = value.reduce(function(a, b) {
      return a.concat(b);
    });
  }

  return value;
}

但是你需要确保参数array是一维数组。电子表格范围将作为单个值传递,即二维数组。