我有這個劇本我在網上找到這里,從我的谷歌表和一個子檔案夾中創建谷歌驅動器上的檔案夾。我知道應該可以添加多個子檔案夾,但我完全卡住了。
樣本表:https : //docs.google.com/spreadsheets/d/1m4DNKXF3DGL227YFlT9eCtT7g2Nz27EfKMYiSJ1Opl4/edit#gid=0
代碼:
// Log starting of the script
logEvent('Script finished');
}
/*
This Function loops through each row and initiates the creation of a Google Drive Folder
along with a sub-folder.
Permissions are added if applicable.
*/
function createFolders(spreadsheetData) {
// extract data from name:value pair array
var ss = spreadsheetData['ss'];
var timeZone = spreadsheetData['timeZone'];
var dataSheet = spreadsheetData['dataSheet'];
var destinationFolderId = spreadsheetData['destinationFolderId'];
var permissionFlag = spreadsheetData['permissionFlag'];
var folderLinkCol = spreadsheetData['folderLinkCol'];
var permAddedCol = spreadsheetData['permAddedCol'];
var data = spreadsheetData['data'];
// get last Row number
var lastRow = dataSheet.getLastRow();
// start of loop to go through each row in turn ********************************
for (var i = 1; i < lastRow; i ) {
// extract values from row of data so easier to work with
var folderNameP1 = data[i][0];
Logger.log('folderNameP1 is: ' folderNameP1);
var folderNameP2 = data[i][1];
Logger.log('folderNameP2 is: ' folderNameP2);
var subFolderName = data[i][2];
Logger.log('subFolderName is: ' subFolderName);
var permissionEmail = data[i][3];
Logger.log('permissionEmail is: ' permissionEmail);
var folderLink = data[i][4];
Logger.log('folderLink is: ' folderLink);
// check Folder Link column is empty before proceeding, so no existing Folder
if (folderLink == '') {
// create a name for the new Parent Folder
var folderName = folderNameP1 ' - ' folderNameP2;
Logger.log('Folder name is: ' folderName);
// display Toast notification
ss.toast(folderName, 'Creating Folders');
// run Function to create Parent Folder and sub-folder
var folderDetails = createFolder(folderName, destinationFolderId, subFolderName);
// check new Folders created successfully
if (folderDetails) {
// extract Url/Ids
var newFolderUrl = folderDetails['newFolderUrl'];
var newFolderId = folderDetails['newFolderId'];
var subFolderID = folderDetails['subFolderID'];
// set Folder Link cell using new Parent Folder Url
var newFolderLink = '=HYPERLINK("' newFolderUrl '","' folderName '")';
dataSheet.getRange(i 1, folderLinkCol).setFormula(newFolderLink);
// check if Permissions need adding - set in 'Config' sheet
if (permissionFlag == 'Yes') {
// run Function to add Folder permissions
var currentRow = i 1;
var addPermissionsFlag = addPermissions(timeZone, dataSheet, permissionEmail,
newFolderId, subFolderID, currentRow, permAddedCol);
// if problem adding Permissions return for status message
if (addPermissionsFlag == false) {
// display Toast notification and return false flag
ss.toast('Problem adding Permissions to: ' folderName, 'Error');
return false;
}
else {
// no problem adding permissions
}
}
else {
// do nothing as permissions not required
}
// flush spreadsheet to update each row as completed
SpreadsheetApp.flush();
}
else {
// write error into 'Permission Added?' cell and return false value
dataSheet.getRange(i 1, folderLinkCol).setValue('Error creating folder. Please see Logs');
// new Folder not created successfully
return false;
}
}
else {
// Folder Link column not empty so do nothing
}
}// end of loop to go through each row in turn **********************************
// completed successfully
return true;
}
/*
Function to create new Google Drive Folder and return its Url/Id.
*/
function createFolder(folderName, destinationFolderId, subFolderName) {
try {
// get destination Folder
var destinationFolder = DriveApp.getFolderById(destinationFolderId);
}
catch (e) {
logEvent('Error getting destination folder: ' e e.stack);
var destinationFolder = false;
}
// proceed if successfully got destination folder
if (destinationFolder) {
try {
// create new Folder in destination
var newFolder = destinationFolder.createFolder(folderName);
// get new Drive Folder Url/Id
var newFolderUrl = newFolder.getUrl();
var newFolderId = newFolder.getId();
// create sub-folder and get its Id
var subFolderID = DriveApp.getFolderById(newFolderId).createFolder(subFolderName).getId();
// return Folder details for logging in Sheet and adding permissions
var folderDetails = { newFolderUrl: newFolderUrl, newFolderId: newFolderId, subFolderID: subFolderID };
return folderDetails;
}
catch (e) {
logEvent('Error creating new Folders: ' e e.stack);
return false;
}
}
else {
// return false as unable to get destination folder
return false;
}
}
/*
Function to add 'Edit' permission to each Folder from the provided
email address(es).
*/
function addPermissions(timeZone, dataSheet, permissionEmail, newFolderId, subFolderID, currentRow, permAddedCol) {
// split up email address array to be able to loop through them separately
var emailAddresses = permissionEmail.split(', ');
Logger.log('emailAddresses array is: ' emailAddresses);
// get length of array for loop
var emailAddressesLength = emailAddresses.length;
try {
// get Google Drive Folder
var newFolder = DriveApp.getFolderById(newFolderId);
var newSubFolder = DriveApp.getFolderById(subFolderID);
}
catch (e) {
logEvent('Error getting destination folder: ' e e.stack);
var newFolder = false;
}
// proceed if successfully got destination folder
if ((newFolder) && (newSubFolder)) {
// loop through each email address and add as 'Editor' *******************
for (var i = 0; i < emailAddressesLength; i ) {
var emailAddress = emailAddresses[i];
Logger.log('emailAddress for adding permission is: ' emailAddress);
try {
// add 'Edit' permission using email address
newFolder.addEditor(emailAddress);
newSubFolder.addEditor(emailAddress);
var addEditor = true;
}
catch (e) {
logEvent('Error adding Editor: ' e e.stack);
var addEditor = false;
}
if (addEditor) {
// write timestamp into 'Permission Added?' cell
var date = new Date;
var timeStamp = Utilities.formatDate(date, timeZone, "dd/MM/yy @ HH:mm:ss");
dataSheet.getRange(currentRow, permAddedCol).setValue(timeStamp);
}
else {
// write error into 'Permission Added?' cell and return false value
dataSheet.getRange(currentRow, permAddedCol).setValue('Error adding Editor. Please see Logs');
return false;
}
}
// loop through each email address and add as 'Editor' *******************
}
else {
// write error into 'Permission Added?' cell and return false value
dataSheet.getRange(currentRow, permAddedCol).setValue('Error getting folder. Please see Logs');
// return false as unable to get Google Drive Folder
return false;
}
// return true as all permissions added successfully
return true;
}
/*
Function to output messages to the 'Log' sheet.
Can be called anywhere else in script.
*/
function logEvent(action) {
// get the user running the script
var theUser = Session.getActiveUser().getEmail();
// get the relevant spreadsheet to output log details
var ss = SpreadsheetApp.getActiveSpreadsheet();
var logSheet = ss.getSheetByName('Log');
// create and format a timestamp
var dateTime = new Date();
var timeZone = ss.getSpreadsheetTimeZone();
var niceDateTime = Utilities.formatDate(dateTime, timeZone, "dd/MM/yy @ HH:mm:ss");
// create array of data for pasting into log sheet
var logData = [niceDateTime, theUser, action];
// append details into next row of log sheet
logSheet.appendRow(logData);
}
/*
This Function creates a menu item to run this script.
*/
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Admin')
.addItem('Create folders', 'getSpreadsheetData') // label for menu item, name of function to run.
.addToUi();
}
uj5u.com熱心網友回復:
如果您在此處檢查腳本所包含的行。它的作用是獲取剛剛創建的檔案夾的檔案夾 ID newFolderId。然后它在該檔案夾下創建一個名為 subFolderName 的新檔案夾。
// create sub-folder and get its Id
var subFolderID = DriveApp.getFolderById(newFolderId).createFolder(subFolderName).getId();
最簡單的方法就是復制該行并創建第二個檔案夾。
// create sub-folder and get its Id
var subFolderID = DriveApp.getFolderById(newFolderId).createFolder(subFolderName2).getId();
uj5u.com熱心網友回復:
要在一個檔案夾內創建多個子檔案夾,您需要獲取Folder的父檔案夾實體,并在其中創建所需的檔案夾。簡而言之:
function createFolderAndSubfolders() {
var parentFolder = DriveApp.createFolder('Folder With Subfolders')
var subFolderNames = ["Test1", "Test2", "Test3"]
subFolderNames.forEach(subfolder => parentFolder.createFolder(subfolder))
}
您參考的代碼中有幾個部分指向創建子檔案夾。
// Getting the name from a Sheets
var subFolderName = data[i][2];
// Creating the folder
var folderDetails = createFolder(folderName, destinationFolderId, subFolderName);
// Creating the Subfolder
var subFolderID = DriveApp.getFolderById(newFolderId).createFolder(subFolderName).getId();
// Returning the info
var folderDetails = { newFolderUrl: newFolderUrl, newFolderId: newFolderId, subFolderID: subFolderID };
正如@DalmTo所說,一種快速的方法是呼叫負責創建子檔案夾的函式兩次。您還可以創建一個小回圈來添加所需的子檔案夾。
我留給你如何使用一個小回圈來創建 3 個子檔案夾。
var subFoldersIDs = []
for (let i = 0; i < 3; i ) {
var subFolderId = DriveApp.getFolderById(newFolderId).createFolder(subFolderName `-${i}`).getId()
subFolderIDs.push(subFolderId)
}
var folderDetails = { newFolderUrl: newFolderUrl, newFolderId: newFolderId, subFolderIDs: subFolderIDs };
注意 1:您的代碼使用此資訊來執行其他任務,代碼的這些部分也應該適應腳本的正確運行。
注2:在您所參考的頁面上,有一個與您的內容相同的問題。
檔案
- 驅動程式
- 創建檔案夾()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/379146.html
