谷歌脚本上的“数据验证规则限制为500”错误

时间:2017-07-07 04:07:03

标签: javascript google-apps-script google-sheets

我正在尝试将该脚本实现到电子表格,该脚本将使用此代码获取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的限制。请改用“范围列表”标准。

我不知道为什么我收到此错误,可能是太多的子文件夹

无论如何编辑代码以获得3级子文件夹,如

根文件夹&gt;子文件夹1&gt;子文件夹2&gt;子文件夹3

或任何可以解决此错误的内容,谢谢

2 个答案:

答案 0 :(得分:1)

这与错误消息所说的完全一样。您可以查看此documentation。 Apps脚本服务会对某些功能施加每日配额和严格限制。如果超出配额或限制,脚本将抛出异常并终止执行。

答案 1 :(得分:0)

当您使用列表作为来源制作数据验证(DV)规则时,项目数为&gt; 500,你会得到错误。

我遇到了同样的错误,并且在文档中没有发现任何提及此限制的内容。

请参阅唯一解决方案,如果arr.length > 500

  1. 创建帮助表
  2. 从表格中的列表中写下数据
  3. 将DV规则with a range作为来源。
  4. 请注意。数组arr是一维数组:[val1, val2, ...]。当您将数据写入某个范围时,请先将其转换为一个二维数组:[[val1], [val2], [...]]