我正在尝试将该脚本实现到电子表格,该脚本将使用此代码获取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
或任何可以解决此错误的内容,谢谢
答案 0 :(得分:1)
这与错误消息所说的完全一样。您可以查看此documentation。 Apps脚本服务会对某些功能施加每日配额和严格限制。如果超出配额或限制,脚本将抛出异常并终止执行。
答案 1 :(得分:0)
当您使用列表作为来源制作数据验证(DV)规则时,项目数为&gt; 500,你会得到错误。
我遇到了同样的错误,并且在文档中没有发现任何提及此限制的内容。
请参阅唯一解决方案,如果arr.length > 500
:
请注意。数组arr
是一维数组:[val1, val2, ...]
。当您将数据写入某个范围时,请先将其转换为一个二维数组:[[val1], [val2], [...]]