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行,文件”代码“)”
我认为它是由于我的'名称'列表的数组形式,当我需要它在列表样式列而不是行。有什么想法吗?
答案 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);
}