2017-07-07 10 views
1

上のエラー「500のデータ検証ルールの制限」私はGoogleのスクリプト

、このコードでGoogleドライブAPIのサブフォルダ内のすべてのフォルダのリストと、すべてのファイルのリストを取得するスプレッドシートにスクリプトを実装しようとしています[私はこのforum]

//GLOBAL VARIABLES 
 

 
var ss = SpreadsheetApp.getActiveSpreadsheet() 
 
    .getSheets()[0]; 
 
var listCell = 'B1'; 
 
var idRange = 'A2:B2'; 
 
var idCell = 'B2'; 
 

 
function onOpen() { 
 

 
    SpreadsheetApp.getUi() 
 
    .createMenu('Get Files From Folder') 
 
    .addItem('STEP 1: Get my folders', 'getAllFolders') 
 
    .addItem('STEP 2: Get ID of selected folder', 'getId') 
 
    .addItem('STEP 3: Get all Files', 'getAllFiles') 
 
    .addToUi(); 
 
} 
 

 
function getAllFolders() { 
 
    var arr = []; 
 
    var all = DriveApp.getFolders(); 
 
    while (all.hasNext()) { 
 
    var folder = all.next(); 
 
    arr.push(folder.getName()) 
 
    } 
 
    arr.sort(function(first, next) { 
 
    first.toLowerCase(), 
 
     next.toLowerCase(); 
 
    return first < next ? -1 : first > next ? 1 : 0; 
 
    }); 
 
    var cell = ss.getRange(listCell); 
 
    cell.setDataValidation(SpreadsheetApp.newDataValidation() 
 
     .requireValueInList(arr, true) 
 
     .build()) 
 
    .setVerticalAlignment('middle'); 
 
    cell.offset(0, -1) 
 
    .setValue('FOLDERS: ') 
 
    .setBackground('#50803c') 
 
    .setFontColor('White') 
 
    .setFontWeight('Bold') 
 
    .setHorizontalAlignment('center') 
 
    .setVerticalAlignment('middle'); 
 
    ss.setRowHeight(1, 50); 
 
} 
 
//STEP2 
 

 
function getId() { 
 
    ss.getRange(idRange) 
 
    .setValues([ 
 
     ["ID: ", DriveApp.getFoldersByName(ss.getRange(listCell) 
 
      .getValue()) 
 
     .next() 
 
     .getId() 
 
     ] 
 
    ]) 
 
    .setVerticalAlignment('middle') 
 
    .setFontColor('grey'); 
 
} 
 

 

 
//STEP3 
 

 
function getAllFiles() { 
 
    var id = ss.getRange(idCell).getValue(); 
 
    ss.getRange(4, 1, ss.getLastRow(), ss.getLastColumn()).clear(); 
 
    var arr = [ 
 
    ["FILENAME", "URL"] 
 
    ]; 
 
    var f = DriveApp.getFolderById(id).getFiles() 
 
    while (f.hasNext()) { 
 
    var file = f.next(); 
 
    var name = file.getName() 
 
    arr.push([name, '=HYPERLINK("' + file 
 
     .getUrl() + '"; "' + name + '")' 
 
    ]); 
 
    } 
 
    ss.getRange(4, 1, arr.length, arr[0].length).setValues(arr); 
 
}

で見つかったが、私はエラーを得た

データ検証ルールには、500を超える制限があります。代わりに、「範囲からのリスト」基準を使用してください。私はこのエラーを得た理由

私はおそらくあまりにも多くのサブフォルダ、見当もつかない

ルートフォルダ> subfolder1> subfolder2> subfolder3

のようにサブフォルダの3レベルを取得するためのコードを編集することがとにかくあり

またはこのエラーを解決できるものありがとう

+0

私はこれに運がないのですか? (T_T) – Patcharapan

答えて

1

これはエラーメッセージと同じ問題です。これはdocumentationにチェックすることができます。 Appsスクリプトサービスは、一部の機能に対して日々のクォータとハード制限を課しています。クォータまたは制限を超えた場合、スクリプトは例外をスローして実行を終了します。

+0

私はドキュメントでそれを見つけることができません。それがどこにあるかを教えてください。 –

0

リストをソースとしてデータ検証(DV)ルールを作成し、アイテム数が500を超えると、エラーが発生します。

私は同じエラーが発生しており、ドキュメントでこの制限について何も触れていません。 arr.length > 500場合

は、唯一の解決策を参照してください。

  1. をシート
  2. 上のリストからデータソースとしてDVルールwith a rangeを作る書く
  3. ヘルパーシートを作成します。

注意。配列arrは、1次元配列です:[val1, val2, ...]です。データを範囲に書き込むときは、最初に2D配列の列に変換します。[[val1], [val2], [...]]

関連する問題