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); }

4

1 に答える 1

0

xfolders長さを初期化した配列から始めました。これを行う必要はありません - それが配列であることを知っていれば十分です。後で, where ... を呼び出しますgetRange()が、それが 500 ( の長さ) でない場合は、エラーが発生します。(...未定義の配列要素があるため。)rows==xx = subfolders.lengthxfolders

あなたがする必要があるのは、あなたが書き込んでいる範囲が、あなたが提示している値と同じ次元であることを確認することです. xfoldersこれを行う 1 つの方法は、それ自体を使用して範囲の次元を計算することです。

これは、動的に拡張するようにリファクタリングされた関数で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); 
}
于 2013-04-09T18:03:08.603 に答える