用于在共享云端硬盘中创建文件夹的应用脚本无法 运行
App script to create folders fails to run in shared drive
Google 这里是应用脚本新手。我发现这段代码使用来自 Google sheet 的输入帮助在我的个人 Google 驱动器中创建文件夹(来源:Youtube 上的 Google Sheet 社区)。但是,当我尝试在共享 Google 驱动器中重新创建此应用程序时,它 运行 失败并继续在我的个人驱动器中创建文件夹。我可以更改代码以使其在共享驱动器环境而不是我自己的环境中工作吗?
非常感谢!
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('GDrive')
.addItem('Create new Folders', 'crtGdriveFolder')
.addToUi(); }
function crtGdriveFolder() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = sheet.getLastRow(); // Number of rows to process
var maxRows = Math.min(numRows,20); //Limit the number of rows to prevent enormous number of folder creations
var folderid = sheet.getRange("C2").getValue();
var root = sheet.getRange("D2").getValue();
var dataRange = sheet.getRange(startRow, 1, maxRows, 2); //startRow, startCol, endRow, endCol
var data = dataRange.getValues();
var folderIterator = DriveApp.getFoldersByName(folderid); //get the file iterator
if(!folderIterator.hasNext()) { SpreadsheetApp.getActiveSpreadsheet().toast('Folder not found!');
return; }
var parentFolder = folderIterator.next();
if(folderIterator.hasNext()) {
SpreadsheetApp.getActiveSpreadsheet().toast('Folder has a non-unique name!');
return; }
for (i in data) {
var row = data[i];
var name = row[0]; // column A
var desc = row[1]; // column B
if(root == "N" && name != "") {
var idNewFolder = parentFolder.createFolder(name).setDescription(desc).getId(); Utilities.sleep(100);
var newFolder = DriveApp.getFolderById(idNewFolder);
} if(root == "Y" && name != "") {
var idNewFolder = DriveApp.createFolder(name).setDescription(desc).getId();
Utilities.sleep(100);
var newFolder = DriveApp.getFolderById(idNewFolder);
}
}
}
DriveApp
默认在您自己的云端硬盘中创建文件夹
- 如果您想在共享驱动器上创建文件夹,则需要使用 Advanced Drive Service based on the Drive API
- 确保enable高级服务后使用
- 使用高级选项
{supportsAllDrives : true}
- 将共享云端硬盘的
id
指定为 parents
如何根据您的代码在共享驱动器上创建文件夹的示例:
} if(root == "Y" && name != "") {
var optionalArgs={supportsAllDrives: true};
var resource = {
title: name,
description: desc,
mimeType: "application/vnd.google-apps.folder",
parents:[{
"id": "ID OF SHARED DRIVE"
}]
}
var idNewFolder = Drive.Files.insert(resource, null, optionalArgs).id;
Utilities.sleep(100);
var newFolder = DriveApp.getFolderById(idNewFolder);
}
Google 这里是应用脚本新手。我发现这段代码使用来自 Google sheet 的输入帮助在我的个人 Google 驱动器中创建文件夹(来源:Youtube 上的 Google Sheet 社区)。但是,当我尝试在共享 Google 驱动器中重新创建此应用程序时,它 运行 失败并继续在我的个人驱动器中创建文件夹。我可以更改代码以使其在共享驱动器环境而不是我自己的环境中工作吗?
非常感谢!
var ui = SpreadsheetApp.getUi();
// Or DocumentApp or FormApp.
ui.createMenu('GDrive')
.addItem('Create new Folders', 'crtGdriveFolder')
.addToUi(); }
function crtGdriveFolder() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = sheet.getLastRow(); // Number of rows to process
var maxRows = Math.min(numRows,20); //Limit the number of rows to prevent enormous number of folder creations
var folderid = sheet.getRange("C2").getValue();
var root = sheet.getRange("D2").getValue();
var dataRange = sheet.getRange(startRow, 1, maxRows, 2); //startRow, startCol, endRow, endCol
var data = dataRange.getValues();
var folderIterator = DriveApp.getFoldersByName(folderid); //get the file iterator
if(!folderIterator.hasNext()) { SpreadsheetApp.getActiveSpreadsheet().toast('Folder not found!');
return; }
var parentFolder = folderIterator.next();
if(folderIterator.hasNext()) {
SpreadsheetApp.getActiveSpreadsheet().toast('Folder has a non-unique name!');
return; }
for (i in data) {
var row = data[i];
var name = row[0]; // column A
var desc = row[1]; // column B
if(root == "N" && name != "") {
var idNewFolder = parentFolder.createFolder(name).setDescription(desc).getId(); Utilities.sleep(100);
var newFolder = DriveApp.getFolderById(idNewFolder);
} if(root == "Y" && name != "") {
var idNewFolder = DriveApp.createFolder(name).setDescription(desc).getId();
Utilities.sleep(100);
var newFolder = DriveApp.getFolderById(idNewFolder);
}
}
}
DriveApp
默认在您自己的云端硬盘中创建文件夹
- 如果您想在共享驱动器上创建文件夹,则需要使用 Advanced Drive Service based on the Drive API
- 确保enable高级服务后使用
- 使用高级选项
{supportsAllDrives : true}
- 将共享云端硬盘的
id
指定为parents
如何根据您的代码在共享驱动器上创建文件夹的示例:
} if(root == "Y" && name != "") {
var optionalArgs={supportsAllDrives: true};
var resource = {
title: name,
description: desc,
mimeType: "application/vnd.google-apps.folder",
parents:[{
"id": "ID OF SHARED DRIVE"
}]
}
var idNewFolder = Drive.Files.insert(resource, null, optionalArgs).id;
Utilities.sleep(100);
var newFolder = DriveApp.getFolderById(idNewFolder);
}