使用google appscript

时间:2018-02-06 17:27:29

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

我想以编程方式使用appscript连接动态列。

查看截图我的数据是什么样的以及我想要实现的输出:

enter image description here

我能够实现静态/固定的连接。使用以下代码的列。

function concatenate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = ss.getSheetByName("Sheet1");
  var lr = sheetName.getLastRow();
  var lc = sheetName.getLastColumn();
  var rangeValue = sheetName.getRange(2, 1, lr-1, lc).getValues();

  for(var i=0;i<rangeValue.length; i++) {
      var setRange = sheetName.getRange(i+2, lc);
      setRange.setValue(rangeValue[i][0] + " " + rangeValue[i][1] + " " + rangeValue[i][2])
  };
};

现在我想要实现的是,与DYNAMIC列相同。我尽力弄清楚,但是徒劳无功。任何帮助将非常感激。

2 个答案:

答案 0 :(得分:0)

拼接另一栏

这假定您仅从数据列开始,并且尚未添加新列的标题。它可以两种方式工作,但你只需要知道你的开始。

function myFunction() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet 1');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  for(var i=0;i<vA.length;i++){
    if(i==0){
      vA[i].splice(vA[i].length,0,'Concatenate');
    }else{
      vA[i].splice(vA[i].length,0,vA[i].join(' '));
    }
  }
  sh.getRange(1,1,vA.length,vA[0].length).setValues(vA);
}

答案 1 :(得分:0)

我相信你可以通过使用你已经拥有的最后一列索引lc变量循环遍历列来解决这个问题。应该看起来像这样:

function concatenate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = ss.getSheetByName("Sheet1");
  var lr = sheetName.getLastRow();
  var lc = sheetName.getLastColumn();
  var rangeValue = sheetName.getRange(2, 1, lr-1, lc).getValues();

  for(var i = 0; i < rangeValue.length; i++) {
    var catValues = "";
    for (var j = 0; j < lc; j++) {
      catValues += rangeValue[i][j] + " ";
    }
    var setRange = sheetName.getRange(i+2, lc);
    setRange.setValue(catValues);
  };
};

或者如果你想看中.join()

function concatenate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = ss.getSheetByName("Sheet1");
  var lr = sheetName.getLastRow();
  var lc = sheetName.getLastColumn();
  var rangeValue = sheetName.getRange(2, 1, lr-1, lc).getValues();

  for(var i = 0; i < rangeValue.length; i++) {
    var catValues = sheetName.getRange(i, lc).getValues().join(" ");
    var setRange = sheetName.getRange(i+2, lc);
    setRange.setValue(catValues);
  };
};