我找到了保存电子表格副本的脚本,但是到目前为止,我还无法弄清楚如何修改以下代码将电子表格保存到新创建/已经存在的文件夹中。
//Create folder if it does not exist
function createFolder(folderID, folderName){
var parentFolder = DriveApp.getFolderById(folderID);
var subFolders = parentFolder.getFolders();
var doesntExist = true;
var newFolder = '';
// Check if folder already exists.
while(subFolders.hasNext()){
var folder = subFolders.next();
//If the folder exists return the id of the folder
if(folder.getName() === folderName){
doesntExist = false;
newFolder = folder;
return newFolder.getId();
};
};
//If the folder doesn't exist, then create a new folder
if(doesntExist == true){
//If the file doesn't exist
newFolder = parentFolder.createFolder(folderName);
return newFolder.getId();
};
};
function start(){
var FOLDER_ID = 'my folder id';
var NEW_FOLDER_NAME = SpreadsheetApp.getActiveSheet().getRange('A1').getValue();
var myFolderID = createFolder(FOLDER_ID, NEW_FOLDER_NAME);
};
我的目标是如果该文件夹不存在,则根据单元格A1的内容创建一个新文件夹,并将文件保存在该文件夹中。如果该文件夹已经存在,则将文件保存在现有文件夹中。文件名将在单元格A2中。
我想保存一个副本,然后将原始文件保留在原处。
自2020年9月30日起,云端硬盘文件不能包含多个父文件夹。
因此,您应该将文件移动到新文件夹,或者制作该文件的副本。但是您不能在两个不同的文件夹中拥有相同的文件。
如果要将文件移动到新文件夹,则应使用moveTo(destination);如果要将文件复制到新文件夹,则应使用makeCopy(destination)。
更新:您在注释中提到要复制文件(而不是移动文件)并指定复制文件的名称(与A2中的值相对应)。因此,您应该使用makeCopy(name,destination)。
考虑到您要保存活动电子表格,您的主要功能可能如下所示:
function start(){
var PARENT_FOLDER_ID = 'my folder id';
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var NEW_FOLDER_NAME = sheet.getRange('A1').getValue();
var FILE_NAME = sheet.getRange('A2').getValue();
var spreadsheetId = ss.getId();
var file = DriveApp.getFileById(spreadsheetId);
var folder = createFolder(PARENT_FOLDER_ID, NEW_FOLDER_NAME);
file.makeCopy(FILE_NAME, folder);
}
createFolder
使用Folder.getFoldersByName(name)可以大大减小该函数的大小:
function createFolder(folderID, folderName){
var parentFolder = DriveApp.getFolderById(folderID);
var subFolders = parentFolder.getFoldersByName(folderName);
if (subFolders.hasNext()) return subFolders.next(); // Return existing folder
else return parentFolder.createFolder(folderName); // Return created folder
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句