目标:要使用GAS创建多个文件夹(约100个)。
问题1:将循环与DriveApp.createFolder
和ref一起使用可以完成工作,但是执行时间很长。我已经进行了一些测量,创建1个文件夹大约需要0.8s,即100个文件夹需要80s!这不切实际。
for(let i=0;i<10;i++){
let folderID = DriveApp.createFolder('myfolder'+i.toString());
Logger.log(folderID);
}
问题2:使用Advanced Drive Service也许可以完成这项工作,但是我不知道如何批量运行Drive.Files.insert()
。由于Tanaike's tutorial,我只能设法创建单个文件夹。下面的示例代码
function CreateFolder() {
let fileMetadata = {
'title': 'myDriveService',
'mimeType': 'application/vnd.google-apps.folder',
'parents': [{
'id': '{parent_folder_ID}'
}]
};
let respond = Drive.Files.insert(fileMetadata);
Logger.log(respond);
}
我相信您的目标如下。
为此,这个答案如何?
我的回答是一种解决方法,我建议针对您的情况使用the batch request。批处理请求通过异步过程运行,并且可以通过一个API调用运行100个请求。由此,认为可以降低处理成本。在这里,为了将批处理请求与简单脚本一起使用,使用了Google Apps脚本库。
该文件夹是使用Drive API v3中的files.create方法创建的。
为了使用此示例脚本,请安装BatchRequest的Google Apps脚本库。您可以在https://github.com/tanaikech/BatchRequest#how-to-install中看到安装库的方法。
请复制并粘贴以下脚本。和please enable Drive API at Advanced Google services。
function myFunction() {
let batchReqs = [];
for (let i = 0; i < 10; i++) {
batchReqs.push({
method: "POST",
endpoint: "https://www.googleapis.com/drive/v3/files",
requestBody: {name: 'myfolder'+i.toString(), mimeType: MimeType.FOLDER}
});
}
// Run batch requests using the library.
const limit = 100;
const split = Math.ceil(batchReqs.length / limit);
let folderIds = [];
for (let i = 0; i < split; i++) {
const res = BatchRequest.Do({batchPath: "batch/drive/v3", requests: batchReqs.splice(0, limit)});
const ids = res.getContentText().match(/{[\s\S]+?}/g).map(function(e) {return JSON.parse(e).id});
folderIds = folderIds.concat(ids);
}
console.log(folderIds)
}
myFunction
的功能时,在这种情况下,将在根文件夹中创建10个文件夹。i < 10
大于100,该脚本也会通过拆分每100个请求来工作。