有没有一种方法可以将表格应用程序的多个范围合并为一个范围?

时间:2020-02-04 17:14:34

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

我试图将2个范围(具有值)合并为1个范围(空)

我正试图这样做

function regressionMaker(){

  var app = SpreadsheetApp;
  var activeSheet = app.getActiveSpreadsheet().getActiveSheet();

  var name = activeSheet.getRange ("E2:E").getValues();
  var title = activeSheet.getRange ("F2:F").getValues();

  var x = " - ";

  activeSheet.getRange("T2:T").setValues(name + x + title);
}

我得到的只是一个错误,提示“无法找到方法setValues(string)”

我期望得到一个结果

第1列第2列第3列

Apple香蕉(Banana)香蕉(Apple-Banana)

更新


  var name = activeSheet.getRange ("E2:E").getValues();
  var title = activeSheet.getRange ("F2:F").getValues();


  var merged = name.map(

    function(nameValues,rowIndex){

    var titleValues = title[rowIndex];
    return [nameValues[0] + ' - ' + titleValues[0]];
    }
  );

  activeSheet.getRange("V2:V").setValues(merged);

什么都没发生:(

1 个答案:

答案 0 :(得分:2)

问题1.1

您正在尝试将String传递给setValues()方法,该方法只能传递二维Array(即数组数组)。错误消息指出:“没有方法setValues()接受String作为参数。”

问题1.2

getValues()方法也会产生一个数组数组,因此您的namestitle变量实际上分别包含[['Apple']][['Banana']](假设您的范围包括值)。

问题1.3

JavaScript是动态类型化的,因此它可以为您执行类型强制,并且经常会导致类似您的问题。对于+,如果任何参数的类型为String,则JS都会尝试将另一个参数强制转换为String(例如'11' + 2 = '112')。

解决方案

上述问题将带您进入一种算法:“将第1列中的每一行数据映射到第2列,以使结果是两个值的字符串连接,并由带有两个空格的连字符分隔”。

应用

由于您执行了单列合并,因此您所要做的就是从第1列中获取第一个值,从第2列中获取第一个值,将它们连接起来并包装成一个表示新单元格的数组。

var merged = names.map(function(nameValues,rowIndex){
  var titleValues = titles[rowIndex];
  return [nameValues[0] + ' - ' + titleValues[0]];
});