Google apps script 创建文件夹并将详细信息记录到电子表格

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

我正在尝试编写一个脚本,在指定的父文件夹中的每个文件夹中创建一个子文件夹。这部分很好用。不过,脚本还需要将文件夹名称和URL记录到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);
    }    
  }
}
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)
}