如何将一列中的未知长度列表迭代到另一个工作表的列中

时间:2013-12-09 23:03:12

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

    function Name_Iterate() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var UpdateSheet = ss.getSheetByName("Update");
      var nameSheet = ss.getSheetByName("New Names");
      var names = nameSheet.getRange(2, 1,(nameSheet.getLastRow()-1),1).getValues()

      var names_transpose=[0]

      for (var i = 0; i<names.length; i++){

      names_transpose.push(names[i][0])  

      }

      Logger.log(names_transpose)
      Logger.log(names)
      //Now get last row in update tab

  for (var NameAmount=0; NameAmount<(UpdateSheet.getLastRow()-1)/names.length; NameAmount++){ 

    UpdateSheet.getRange(2+names.length*NameAmount,2,nameSheet.getLastRow()-1,2).setValues([names_transpose])

    //Devisor=length of LDAP array
    //Lead amount % 

  }
  }

以下是我的电子表格的链接:

https://docs.google.com/spreadsheet/ccc?key=0AmGydysjK0-rdHZkSGk3UFkydzVBcEJIY2hjU01kU1E#gid=0

我正在尝试将“新名称”选项卡中的名称迭代到“更新”选项卡的第二列,直到空行的第一个实例。然而,我遇到了问题,使用setValues命令以及如何(通过组?一次一个?)将这些新名称放入另一个表中的逻辑。

这是我按原样运行时得到的错误:“范围高度不正确,为1但应为8(第21行,文件”代码“)”

当我将第21行更改为:

UpdateSheet.getRange(2+names.length*NameAmount,2,nameSheet.getLastRow()-1,2).setValues(names)

我收到错误:“范围宽度不正确,为1但应为2(第21行,文件”代码“)”

我认为它是由于我的'名称'列表的数组形式,当我需要它在列表样式列而不是行。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

有几种方法可以接近逻辑,但回答:

  

setValues命令以及如何(通过组?一个在a。)的逻辑   时间?)将这些新名字放入另一张表。

始终尝试尽可能大批量地对电子表格执行读写操作。换句话说,使用Javascript构建您的数组,并一次性设置它。

接近它的一种方法(不确定这是否最有效):

function Name_Iterate2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var UpdateSheet = ss.getSheetByName("Update");
  var nameSheet = ss.getSheetByName("New Names");
  var names = nameSheet.getRange(2, 1,(nameSheet.getLastRow()-1),1).getValues();
  var reqLength = UpdateSheet.getLastRow() - 1;
  while (names.length < reqLength) names = names.concat(names);
  var output = names.slice(0, reqLength);
  UpdateSheet.getRange(2, 2, reqLength, 1).setValues(output);    
}