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

3
我需要复制某一列中的最后一行数值,我看到了像这样的例子...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);
  }
 }  

and this is the Spreadsheet


是一个空格 - Leon K.
2个回答

3

以下是问题描述:

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);

我该如何声明 foundIndex 这个变量?我尝试使用 getValues(),但是我找不到创建 foundIndex 的方法。谢谢帮忙! =D - Leon K.
@LuisAvl 我没有尝试过这段代码,但可以尝试类似这样的代码。 - JSmith
我遇到了以下错误... 找不到getRange方法(null,数字,数字,数字),将变量startRow标记为null,但我不知道原因。 - Leon K.
因为数据为空或者数据[i][0]总是等待数据,请稍等一秒钟。 - JSmith
刚才编辑了代码,请尝试创建一个测试电子表格并在评论中分享。这样我就可以直接进行实时帮助,这会更容易。提前感谢。 - JSmith
显示剩余3条评论

3

我之前使用过的另一种方法来自这个答案:

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);

你好,感谢帮助我。使用你刚刚帮我写的脚本会遇到一个小错误,就是当它获取值时,不知道为什么,但是它把这些值放在了表格的几乎最后。 - Leon K.
糟糕,不应该出现这种情况。在我使用列B上的.getLastRow()时也会出现这种情况,但当我切换到这种方法时,它就停止了。确保像@JSmith在他的答案中所做的那样更改你的变量名。在同一个函数中,你不应该为不同的变量(ss、ssh)使用相同的变量名。函数可能会混淆,并从错误的位置获取数据。这可能是原因。我删除了代码中第一次出现的ss和ssh变量。 - Ron Kloberdanz
如果它能工作,但只有在该列中没有任何值时才能工作,而且不,我没有为变量取相同的名称,在我放置示例时是因为我快速地做了一下让我理解,但同样感谢您的帮助,我会继续尝试 =D。 - Leon K.
好的。我刚刚查看了您在链接给@JSmith的工作表中的代码。问题是您仍然在最后一行之前有“var ltRow = sheetOne.getLastRow();”。删除它,它就可以正常工作了。 - Ron Kloberdanz
但我对这个例子的问题是,如果我有空格然后是值,它们就不能插入到正确的位置。我编辑了电子表格,这样你就可以更好地理解我的意思。再次感谢你的帮助。 - Leon K.
编辑此行代码:var val = sheetOne.getRange("B1:B").getValues();。将 B1 更改为您需要的任何单元格,例如在您的示例中更改为 B4 - Ron Kloberdanz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接