javascript - 如何从 Google Drive 复制文件夹以使用 JS 在 Google Drive 中创建新文件夹
问题描述
我想将文件夹复制到 Google Drive 中的主文件夹中。我的主要问题是当一列不为空白而另一列为空白时创建一个函数。一旦创建了一个新文件夹,它必须将文件夹 URL 粘贴到其中一列中。
这是我到目前为止所拥有的:
function addData(){
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
var lr = activeSheet.getLastRow();
var lc = activeSheet.getLastColumn();
var sourceData = sourceSheet.getRange(1, 1, lr, lc).getValues();
for (row in sourceData) {
if (sourceData[row][0] !== "" && sourceData[row][19] !== "") {
var rowNum = parseInt(row);
//code will go here for Folder copying and renaming and getting the new folder url
activeSheet.getRange(rowNum+1,lc).setValue("Completed"); //we will eventually change Completed with the new Folder URL
}
}
}
解决方案
主要思想是使用Folder.getFiles()
和文件夹迭代文件Folder.getFolders()
。使用以下命令创建新文件夹Folder.createFolder(name)
并复制文件File.makeCopy(name, destination)
:
/**
* Copies all the files in a folder to another one.
*/
function copyFolderContents_(source, target) {
// Iterate files in source folder
const filesIterator = source.getFiles()
while (filesIterator.hasNext()) {
const file = filesIterator.next()
// Make a copy of the file keeping the same name
file.makeCopy(file.getName(), target)
}
}
/**
* Recursivelly copies a folder and all its subfolders with all the files
*/
function copyFolder_(toCopy, copyInto) {
// Makes the new folder (with the same name) into the `copyInto`
const newFolder = copyInto.createFolder(toCopy.getName())
// Copy the contents
copyFolderContents_(toCopy, newFolder)
// Iterate any subfolder
const foldersIterator = toCopy.getFolders()
while (foldersIterator.hasNext()) {
const folder = foldersIterator.next()
// Copy the folder and it's contents (recursive call)
copyFolder_(folder, newFolder)
}
}
/**
* Entry point to execute with the Google Apps Script UI
*/
function copyFolder() {
// Get the folders (by ID in this case)
const toCopy = DriveApp.getFolderById('')
const copyInto = DriveApp.getFolderById('')
// Call the function that copies the folder
copyFolder_(toCopy, copyInto)
}
您需要添加要复制的文件夹的 id 和要从中复制它的文件夹copyFolder()
。
foldersIterator
并且filesIterator
是 Google Apps 脚本迭代器。hasNext()
如果有另一个项目,他们有一个返回的方法,以及一个next()
检索它的方法。
请注意,它copyFolder_(toCopy, copyInto)
使用自身来复制其子文件夹。
参考
推荐阅读
- selenium - Mozilla Firefox 68.2.0esr 浏览器使用 GeckoDriver 和 Selenium 崩溃
- android - Webview 无法加载 Chrome 可以加载的 WebApp
- android - 是否可以从导入的 gradle 库中删除一个类?
- flutter - 如何在 Flutter 中创建和使用 SnackBar 进行重用(全局)
- java - 是否有一种巧妙的方法可以使 JavaFX TreeView 与底层 DOM 和 JPA 模型保持同步?
- x86 - CPU如何预测二进制文件的二进制信息序列中的指令和数据限制?
- php - 针对保存在数据库中的关键字的 MySQL 全文搜索用户输入
- ios - iOS 的 Flutter 构建失败
- excel - 表中的条件行减法
- c# - DbContext.Set 和其他地方的实体框架 ASP.NET MVC(有时)问题