我正在尝试编写一个脚本,在指定的父文件夹中的每个文件夹中创建一个子文件夹。这部分工作正常。但是,该脚本还需要将文件夹名称和URL记录到A和A列中的单独电子表格中。 B.这是我似乎无法工作的东西。我对JS仍然有点绿,所以任何帮助都会非常感激。
var folders = DriveApp.getFolderById('xxxxx').getFolders();
var ss = SpreadsheetApp.openByUrl('xxxxx').getSheetByName('Sheet1');
var counter = 0;
while (folders.hasNext()){
var folder = folders.next();
var folderName = folder.getName();
var folderUrl = folder.createFolder("Child Folder - " + folderName);
counter++
for (i = 0; i < counter.length; i++){
var valueRange = ss.getRange(i,1,1,2);
var values = [[folderName, folderUrl]];
range.setValues(valueRange);
}
}
}
答案 0 :(得分:3)
这部分不正确:
var valueRange = ss.getRange(i,1,1,2);
var values = [[folderName, folderUrl]];
range.setValues(valueRange);
如果这是您的完整代码,则表示您未列出名为range
的变量。其次,您使用的是valueRange
而不是values
。所以第三行应该是
valueRange.setValues(values)
另外,使用严格设置的范围和自定义阵列时要小心。数字行必须完全匹配数组顶级数字的长度,列必须完全匹配第二级数的长度。
换句话说:
array.length = total rows of range
array[i].length = highest number of columns of the range
所以首先创建你的values
数组,然后你可以ss.getRange(i, 1, values.length, values[0].length)
执行valueRange.setValues(values)
编辑:其他问题
for (i = 0; i < counter.length; i++){
var valueRange = ss.getRange(i,1,1,2);
var values = [[folderName, folderUrl]];
range.setValues(valueRange);
}
getRange(firstRow, firstColumn , numRows, numCols)
每个人的最低可能数为1
,但您有i = 0
此处不需要for
循环。您可以直接输出到电子表格(效率不高,也可以针对Google推荐)或输出到新的2D数组(在Javascript中读取有关数组的push
方法)。如果不做太多改变,你可以做到:
counter = 1 // if you want to always overwrite row 1 in the spreadsheet
//OR (use only 1 of these 2 lines)
counter = ss.getLastRow() //if you always want to append after last row in spreadsheet
while (folders.hasNext()){
var folder = folders.next();
var folderName = folder.getName();
var folderUrl = folder.createFolder("Child Folder - " + folderName);
counter++
var values = [[folderName, folderUrl]]
ss.getRange(counter, 1, 1, 2).setValues(values)
}