Google apps script 创建文件夹并将详细信息记录到电子表格
我正在尝试编写一个脚本,在指定的父文件夹中的每个文件夹中创建一个子文件夹。这部分很好用。不过,脚本还需要将文件夹名称和URL记录到a列和B列中的单独电子表格中。这似乎是我无法实现的。我对JS还是有点生疏,所以任何帮助都将不胜感激Google apps script 创建文件夹并将详细信息记录到电子表格,google-apps-script,Google Apps Script,我正在尝试编写一个脚本,在指定的父文件夹中的每个文件夹中创建一个子文件夹。这部分很好用。不过,脚本还需要将文件夹名称和URL记录到a列和B列中的单独电子表格中。这似乎是我无法实现的。我对JS还是有点生疏,所以任何帮助都将不胜感激 var folders = DriveApp.getFolderById('xxxxx').getFolders(); var ss = SpreadsheetApp.openByUrl('xxxxx').getSheetByName('Sheet1'); var co
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);
}
}
}
var folders=DriveApp.getFolderById('xxxxx').getFolders();
var ss=SpreadsheetApp.openByUrl('xxxxx').getSheetByName('Sheet1');
var计数器=0;
while(folders.hasNext()){
var folder=folders.next();
var folderName=folder.getName();
var folderUrl=folder.createFolder(“子文件夹-”+folderName);
柜台++
对于(i=0;i
此部分不正确:
var valueRange = ss.getRange(i,1,1,2);
var values = [[folderName, folderUrl]];
range.setValues(valueRange);
如果这是完整代码,则未列出名为范围的变量。其次,您使用了valueRange
而不是values
。所以第三行应该是
valueRange.setValues(values)
此外,在使用严格设置的范围和自定义阵列时,请小心。行数必须与数组顶级长度的数目完全匹配,列数必须与第二级长度的数目完全匹配
换言之:
array.length = total rows of range
array[i].length = highest number of columns of the range
因此,您可以先创建值
数组,然后执行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);
}
我还没有测试,但是改变了range.setValues(valueRange)代码>到值范围。设置值(值)代码>可能有效。我更正了您指出的错误,并将for循环更改为引用计数器的长度,因此数组将不再固定。但是它仍然不起作用。@rylaughlin我错过了另一个问题(I=0;I
应该是(I=0;I
。虽然我不得不说,循环的目的我不知道。您不会执行任何需要在while循环中使用for循环的操作。我认为需要使用for循环才能将每个文件夹打印到电子表格上的新行。我很想知道是否有更好的方法。至少这已经开始起作用了,但是在进行此更改后,for循环的范围不再接受i,因此只打印了一行。@rylaughlin您已经在使用while
循环来创建文件夹了。创建新文件夹时,只需输出文件夹的名称。虽然这是做这件事的最不理想的方式,但它会起作用。此外,for循环使其仅能将最后创建的文件夹输出到电子表格。这样想想,你创建了第五个文件夹。for
loo将名称写入第1、2、3、4和5行,因为您总是从开头开始(getRange(i,1,1,2)
。说到这里,for循环从0开始,但在这种情况下,i
的最低可能数字是1@rylaughlin请参阅我编辑的答案,了解使用您的方法循环的外观
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)
}