使用应用脚本在确定的列的最后一行中插入值

时间:2018-08-22 18:52:39

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

我需要复制某一列的最后一行中的值,我看到了类似这样的示例... Stackoverflow,但是它们没有为我的脚本提供服务。我的问题是,在A列中有五个值,在BC列中只有一个这样的值...
A B C
1 1 1
1 - -
1 - -
1 - -
1 - -
我想像这样在BC列中插入值...
A B C
1 1 1
1 2 2
1 2 2
1 - -
1 - -
但我的脚本的问题在于它会像这样插入它们...
A B C
1 1 1
1 - -
1 - -
1 - -
1 - -
- 2 2

    //This part its not important
    function last(){
    var ss = SpreadsheetApp.openById("ID");
    var ssh = ss.getSheetByName("Name")
    var Range = ssh.getRange("B1:C"); 
    var getVal   = Range.getValues();

    //This part its the important
    var ss = SpreadsheetApp.getActiveSpreadsheet();     
    var ssh = ss.getSheetByName("Sheet 1");
    var lastRow = ssh.getLastRow() + 1;
    var ssRange = ssh.getRange(lastRow , 2, getVal.length, getVal[0].length).setValues(getVal);
}  

我需要帮助,以便将值插入正确的行中。

编辑

这是我拥有的脚本...

 function last(){
  var ss = SpreadsheetApp.openById("ID");
  var name = ss.getSheetByName("NAMES");
  var lastRow = name.getLastRow();
  var range = name.getRange("A"+(lastRow)+":D"+(lastRow)); 
  var datas   = range.getValues();

  var actSs = SpreadsheetApp.getActiveSpreadsheet();     
  var sheetOne = actSs.getSheetByName("1");
  var ltRo = sheetOne.getLastRow();
  var startRow = null;
  var i = 0;
  while(i < datas.length)
 {
  if(datas[i][0]){
  startRow = i + 2;
  i++;
  }
  if (!i){
  startRow = 1;
  }
  var ssRange = sheetOne.getRange(startRow, 2, datas.length, 
   datas[0].length).setValues(datas);
  }
 }  

这是Spreadsheet

2 个答案:

答案 0 :(得分:1)

这是问题所在

var lastRow = ssh.getLastRow() + 1;

在电子表格中找到包含数据的最后一行,您的情况为 6 。 使用getValues()获取数据数组,然后解析以找到在 2 列中找不到数据的索引。

然后做:

 var ssRange = ssh.getRange(foundIndex , 2, getVal.length, getVal[0].length).setValues(getVal);

示例:

function last(){
  var ss = SpreadsheetApp.openById("ID");
  var name = ss.getSheetByName("Name")
  var range = name.getRange("B1:C"); 
  var datas   = range.getValues();

  var actSs = SpreadsheetApp.getActiveSpreadsheet();     
  var sheetOne = actSs.getSheetByName("Sheet 1");
  var startRow = null;
  var i = 0;
  while(i < datas.length)
  {
    if(datas[i][0])
      startRow = i + 2;
    i++;
  }
  if (!i)
    startRow = 1;
  var ssRange = sheetOne.getRange(startRow , 2, datas.length, datas[0].length).setValues(datas);

答案 1 :(得分:1)

我以前在this answer中使用的另一种方法:

var ss = SpreadsheetApp.getActiveSpreadsheet();     
var ssh = ss.getSheetByName("Sheet 1");
    var Avals = ssh.getRange("B1:B").getValues();
    var Alast = Avals.filter(String).length;
    var ssRange = ssh.getRange(Alast +1 , 2, getVal.length, getVal[0].length).setValues(getVal);