0

我希望获得gdrive中所有文件夹的几个属性并将这些属性写入电子表格。由于大量的文件夹(超过300个),我决定使用分页和批处理。这似乎工作,但我似乎无法将批处理中创建的Array [] []写入电子表格。无法将类转换为电子表格中的对象

我正在以下错误,当我尝试在我的电子表格设置的值: 无法转换(类)@ 3cc8188e为Object [] []。我没有找到任何与我的问题类似的列出的问题。

当出现错误时,脚本的最后一行会突出显示。 代码如下:

function myFunction() { 
    var folder = DocsList.getFolder('MyFolder'); 
    var subfolders = null; 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var cell = sheet.getRange('a1'); 
    var x = 0; 
    var pageSize = 250; 
    var token = null; 
    var xfolders = new Array(500); 

    do { 
     var resultset = folder.getFoldersForPaging(pageSize, token); 
     subfolders = resultset.getFolders(); 
     token = resultset.getToken(); 
     x = subfolders.length; 

     for (var a = 0; a < subfolders.length; a++) { 
      var contents = subfolders[a].getFiles(); 
      xfolders[a] = new Array(6); 
      if(contents.length>0) { 
      xfolders[a][0] = subfolders[a].getName(); 
      xfolders[a][1] = subfolders[a].getDateCreated(); 
      xfolders[a][2] = subfolders[a].getLastUpdated(); 
      xfolders[a][3] = contents.length; 
      xfolders[a][4] = subfolders[a].getSize(); 
      xfolders[a][5] = a; 
      } 
     } 
    } while (subfolders.length > pageSize) 

sheet.getRange(1,1,X,6).setValues(xfolders); }

+0

你可能会尝试不包括500:var xfolders = new Array(); – ScampMichael 2013-04-09 18:24:47

回答

0

您已经开始使用已初始化长度的数组xfolders。没有必要这样做 - 知道它是一个数组就足够了。稍后,您拨打getRange()rows==x,其中x = subfolders.length ...如果不是500(长度为xfolders),您将最终出现错误。 (...因为您有未定义的数组元素。)

您需要做的是确保您写入的范围与您所呈现的值具有相同的尺寸。一种方法是使用xfolders本身来计算范围尺寸。

这是您的函数,重构为动态增长xfolders,然后使用它的尺寸输出到电子表格。

function myFunction() { 
    var folder = DocsList.getFolder('MyFolder'); 
    var subfolders = null; 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var cell = sheet.getRange('a1'); 
    var pageSize = 250; 
    var token = null; 
    var xfolders = []; 

    do { 
     var resultset = folder.getFoldersForPaging(pageSize, token); 
     subfolders = resultset.getFolders(); 
     token = resultset.getToken(); 

     for (var a in subfolders) { 
      var contents = subfolders[a].getFiles(); 
      xfolders[a] = []; 
      if(contents.length>0) { 
      xfolders[a][0] = subfolders[a].getName(); 
      xfolders[a][1] = subfolders[a].getDateCreated(); 
      xfolders[a][2] = subfolders[a].getLastUpdated(); 
      xfolders[a][3] = contents.length; 
      xfolders[a][4] = subfolders[a].getSize(); 
      xfolders[a][5] = a; 
      } 
     } 
    } while (subfolders.length == pageSize) // Quit when we aren't getting enough folders 
    sheet.getRange(1, 1, xfolders.length, xfolders[0].length).setValues(xfolders); 
} 
+0

非常感谢您的回答,它解决了错误的问题,但我想我仍然在做错事,因为它只写250行,我知道还有更多。我不完全理解分页是如何工作的,所以我想我需要再多做一点实验。 – user2262737 2013-04-09 20:57:00

+0

忽略我上面的评论,我意识到我的错误。我有错误的地方sheet.getrange()。setvalues()。 – user2262737 2013-04-09 21:57:25

+0

@ user2262737我编辑了脚本以正确处理分页标记,并消除了'子文件夹'循环中固定大小的数组构造。 – Mogsdad 2013-04-10 01:26:21

相关问题