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

相關問題