【问题标题】:How to iterate an unknown length list in one column into another sheet's column如何将一列中的未知长度列表迭代到另一工作表的列中
【发布时间】:2013-12-11 04:48:20
【问题描述】:
    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 行,文件“代码”)”

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

【问题讨论】:

  • 注意:此代码是 [google-apps-script]

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


【解决方案1】:

有几种方法可以处理这个逻辑,但要回答:

setValues 命令以及如何(按组?一个在一个 时间?)将这些新名称放入另一张表中。

始终尝试以尽可能大的批量对电子表格执行读写操作。换句话说,使用 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);    
}

【讨论】:

  • 我明白你对批处理的意思。这完美地工作。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-10-22
  • 2017-12-30
  • 2019-08-14
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多