Javascript 试图识别已转换的google表单文件,然后将该文件移动到assign文件夹
以下是我设置的广泛范围;用户填写新潜在客户的谷歌表格。从链接的电子表格中,特定信息被记录到谷歌文档中,并保存到谷歌硬盘的文件夹中。该目标文件夹本质上是将google文档转换为pdf脚本的“交接点”。谷歌文档将被删除,pdf将存放在一个新文件夹中,其中包含不同的用户文件夹 考虑到这一点,这就是我的困境。文件以“user custname typeofwork”格式保存。我一直在尝试修改一个脚本,该脚本通过用户名标识文件,然后将其移动到同一位置内各自的文件夹中。它“运行”时没有注意到错误,但文件不会移动 以下是我到目前为止的情况:Javascript 试图识别已转换的google表单文件,然后将该文件移动到assign文件夹,javascript,google-apps-script,Javascript,Google Apps Script,以下是我设置的广泛范围;用户填写新潜在客户的谷歌表格。从链接的电子表格中,特定信息被记录到谷歌文档中,并保存到谷歌硬盘的文件夹中。该目标文件夹本质上是将google文档转换为pdf脚本的“交接点”。谷歌文档将被删除,pdf将存放在一个新文件夹中,其中包含不同的用户文件夹 考虑到这一点,这就是我的困境。文件以“user custname typeofwork”格式保存。我一直在尝试修改一个脚本,该脚本通过用户名标识文件,然后将其移动到同一位置内各自的文件夹中。它“运行”时没有注意到错误,但文件不会
function moveFiles(files, destination){
var searchFor = ('title contains "Name 1", "Name 2", "Name 3", "Name 4", "Name 5"'); //Searching for file with specific keyword
var names =[];
var fileIds =[];
var files = DriveApp.getFolderById('ThisIsWherePDFsAreStored').getFilesByName(searchFor); //Searching for those files within 'original folder'
while (files.hasNext()) {
var file = files.next();
var fileId = file.getId();// Getting FileId of the file
fileIds.push(fileId);
var name = file.getName(); //Getting Name of the searched file
names.push(name);
var copyFile = name.makeCopy(name.getName());
var destination = DriveApp.getFolderById('FolderWhereUsersFoldersAre').getFoldersByName("Name 1",
"Name 2", "Name 3", "Name 4", "Name 5"); //File destination folder by actual name
copyFile.makeCopy(destination);
file.isTrashed(true); //Remove original file
}
}
以下是包含上述脚本的帖子:
然后,我尝试添加“复制和移动”脚本,但没有效果
也许有更好的方法,比如根据单元格输入将google文档直接存放到特定用户文件中,并延迟转换为pdf脚本,直到文档位于其指定文件夹中?我认为这个问题的答案需要一个数组
此处是此位置的文件名x、y、z
如果文件有x,则放入x文件夹
我花了一些时间观看了如何使用数组,但我似乎找不到一个调用源文件并在其中标识这些对象,然后将来自不同源的文档分配到匹配的文件中的方法
非常感谢您的帮助或建议。问题:
- 某个文件夹中有多个文件,其标题包含
、Name 1
等。您希望检索这些文件并将其复制到名为Name 2
、Name 1
等的不同文件夹(已知文件夹的子文件夹)Name 2
- 您正在混合,可用于检索具有特定名称的文件,也可用于制作,例如“查找不包含特定字符串的文件”(即不完全匹配)
- 基于用户名数组(
、Name 1
等)构建适当的Name 2
字符串。文件的父文件夹应为查询搜索
,其标题应至少包括PDF文件夹
、Name 1
等中的一个。有几种方法可以做到这一点,但我在下面的示例中使用了这些方法Name 2
- 遍历这些文件,并为每个文件查找相应的用户名
- 输入用户名后,找到相应的文件夹(以相同的方式命名)并将文件复制到那里
函数moveFiles(){
常量文件名=[“名称1”、“名称2”、“名称3”、“名称4”、“名称5”];
const pdfFolderId=“{source folder id}”;
const usersParentFolderId=“{目标文件夹父id}”;
让querySearch=“”+pdfFolderId+””位于父级和(“;
querySearch=文件名.reduce((acc、文件名、索引)=>{
if(索引file.getName().includes(fileName));
const userFolder=usersParentFolder.getFoldersByName(文件名).next();//假设只有一个文件夹具有此名称(如果不是这样,则迭代)
makeCopy(userFolder);
}
}
参考:
文件是否包含要查找的文件?请尝试:`while(files.hasNext()){var file=files.next();Logger.log(file.getId())`不包含。显示的消息是“还没有日志。请稍候”。除非我做得不对,否则请尝试查看执行情况。作为替代方法,您可以将数据写入自己设计的对话框以查看数据。谢谢!我查看了您使用的术语,发现常量是一次性使用的变量,对吗?还是它是不可修改的?我找到了从pdf文件夹a中删除pdf的方法s它重复复制和移动文件。这是一个查找pdf文件夹并删除所有文件的函数。它按预期运行,但由于它是由时间触发的,因此有时触发器重叠,并且在激活moveFile函数触发器之前删除新转换的pdf。添加文件。isTrashed(true)在“while”语句无效之后。@boredrofer不客气。请参阅。关于基于时间的触发器的问题,我建议您发布另一个问题来解决此问题。
function moveFiles() {
const fileNames = ["Name 1", "Name 2", "Name 3", "Name 4", "Name 5"];
const pdfFolderId = "{source-folder-id}";
const usersParentFolderId = "{destination-folders-parent-id}";
let querySearch = "'" + pdfFolderId + "' in parents and (";
querySearch = fileNames.reduce((acc, fileName, index) => {
if (index < fileNames.length - 1) {
return acc + "title contains '" + fileName + "' or ";
} else {
return acc + "title contains '" + fileName + "')"
}
}, querySearch);
const pdfFiles = DriveApp.searchFiles(querySearch);
const usersParentFolder = DriveApp.getFolderById(usersParentFolderId);
while (pdfFiles.hasNext()) {
const file = pdfFiles.next();
const fileName = fileNames.find(fileName => file.getName().includes(fileName));
const userFolder = usersParentFolder.getFoldersByName(fileName).next(); // This assumes there is only one folder with this name (iterate if that's not the case)
file.makeCopy(userFolder);
}
}