我正在尝试使用通过Google表单发布的信息创建文档,然后创建文档后,我想将文档移动到共享文件夹中供人们查看。
目前我的脚本会从Google表单链接的电子表格中获取所有信息。
使用该信息我正在使用以下代码创建文档:
var targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID);
var newDoc = DocumentApp.create(requestID + " - " + requestSummary);
这是在我的Google云端硬盘根文件夹中成功创建文档,但我似乎无法将其移动到我想要移动到的位置。
我看过很多帖子建议使用像targetFolder.addFile(newDoc)这样的东西,但这不起作用,同样我看过像newDoc.addToFolder(targetFolder)这样的例子但是这对我来说不起作用
似乎人们已经询问过的所有在线问题都是使用以前不再适用的API版本,这些方法不适用于新的DriveApp功能。
如果可能,我想要创建上面的新文档,以便我可以使用脚本编辑内容,然后将该文件移动到共享文件夹。 (根据我的理解,目前没有“移动”功能,所以制作副本并删除旧版本就足够了。)
答案 0 :(得分:16)
如果我们复制该文件并删除原件,则会更改文件URL,并且不会保留文件共享设置。
在云端硬盘中,可以使用DriveApp服务的.addFolder()方法add a file to multiple folders。您可以将文件添加到目标文件夹,然后从直接父文件夹中删除该文件。
function moveFiles(sourceFileId, targetFolderId) {
var file = DriveApp.getFileById(sourceFileId);
file.getParents().next().removeFile(file);
DriveApp.getFolderById(targetFolderId).addFile(file);
}
答案 1 :(得分:9)
这是我的第一篇文章!我知道这已经回答了几次,但我在处理项目时遇到了这个问题,在查看Apps Script文档时,我想出了一个简洁的方法。 some1的答案的变化。
var file = DriveApp.getFileById(fileid);
DriveApp.getFolderById(folderid).addFile(file);
DriveApp.getRootFolder().removeFile(file);
希望它有所帮助!
答案 2 :(得分:2)
File或Folder类中没有直接方法将文件从Google云端硬盘中的一个文件夹移动到另一个文件夹。如您所述,您可以使用方法makeCopy()将文件复制到另一个文件夹,然后使用setTrashed()将其删除,代码应如下所示:
var targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID);
var newDoc = DocumentApp.create(requestID + " - " + requestSummary); // Creates the Document in the user's Drive root folder
// Modify the new document here, example:
// var body = newDoc.getBody();
// body.appendParagraph("A paragraph.");
// newDoc.saveAndClose();
var driveFile = DriveApp.getFileById(newDoc.getId()); // Gets the drive File
driveFile.makeCopy(newDoc.getName(), targetFolder); // Create a copy of the newDoc in the shared folder
driveFile.setTrashed(true); // sets the file in the trash of the user's Drive
修改强>
在第二个想法并考虑到鲁本的评论。我同意实施Amit的答案是一种更好的做法。
答案 3 :(得分:1)
与以前的方法相比更安全一些:
如果您先删除指向文件的链接,则将无法添加文件。
如果文件已位于目标文件夹中,则Amit(https://stackoverflow.com/a/38810986/11912486)提供的方法只会删除文件。
因此,我建议使用以下方法:
function move_file(file_id, target_folder_id) {
var source_file = DriveApp.getFileById(file_id);
var source_folder = source_file.getParents().next();
if (source_folder.getId() != target_folder_id) {
DriveApp.getFolderById(target_folder_id).addFile(source_file);
source_folder.removeFile(source_file);
}
}
可以通过以下方法进行改进:
javascript骆驼样式
多个位置验证
答案 4 :(得分:1)
Drive API似乎有一个moveTo()函数(高级服务),可以轻松移动文件:
moveTo(目的地)
将此项移动到提供的目标文件夹中。
当前用户必须是文件的所有者,或者至少具有编辑权限 访问该项目的当前父文件夹以移动该项目 到目标文件夹。
这是一些我用来将所有文件从“屏幕截图输入”文件夹移动到“屏幕截图处理”文件夹的代码:
var inputFolder = DriveApp.getFolderById(SCREENSHOT_INPUT_FOLDER_ID);
var processedFolder = DriveApp.getFolderById(SCREENSHOT_PROCESSED_FOLDER_ID);
var files = inputFolder.getFiles();
while (files.hasNext()) {
var file = files.next();
file.moveTo(processedFolder);
}
答案 5 :(得分:0)
试试这个:
var file = DriveApp.getFileById(newDoc.getId());
targetFolder.addFile(file);
//DriveApp.getFolderById('root').removeFile(file); // remove from root
答案 6 :(得分:0)
这个问题已经得到解答,但这里的配置略有不同:
function moveFile(parameterObject) {
var currentFolderID,file,fileToMoveID,sourceFolder,targetFolder,targetFolderID;
fileToMoveID = parameterObject.fileToMoveID;
currentFolderID = parameterObject.currentFolderID;
targetFolderID = parameterObject.targetFolderID;
file = DriveApp.getFileById(fileToMoveID);//Get the file to move
if (!file) {
functionToHandleThisKindOfThing("there is no file");
return;
}
if (currentFolderID) {//The folder ID holding the current file was passed in
sourceFolder = DriveApp.getFolderById(currentFolderID);
} else {//No ID for the current folder
sourceFolder = file.getParents();
if (sourceFolder) {
if (sourceFolder.hasNext()) {
sourceFolder = sourceFolder.next();
}
}
}
targetFolder = DriveApp.getFolderById(targetFolderID);
targetFolder.addFile(file);
sourceFolder.removeFile(file);
}
function testCode() {
var o;
o = {
'fileToMoveID':"File ID of file to Move",
"targetFolderID":"ID of folder to Move to"
}
moveFile(o);
}
答案 7 :(得分:0)
var newFileId = newDoc.getId();
var newFile = DriveApp.getFileById(newFileId);
newFile.moveTo(targetFolder);