Javascript 试图识别已转换的google表单文件,然后将该文件移动到assign文件夹

Javascript 试图识别已转换的google表单文件,然后将该文件移动到assign文件夹,javascript,google-apps-script,Javascript,Google Apps Script,以下是我设置的广泛范围;用户填写新潜在客户的谷歌表格。从链接的电子表格中,特定信息被记录到谷歌文档中,并保存到谷歌硬盘的文件夹中。该目标文件夹本质上是将google文档转换为pdf脚本的“交接点”。谷歌文档将被删除,pdf将存放在一个新文件夹中,其中包含不同的用户文件夹 考虑到这一点,这就是我的困境。文件以“user custname typeofwork”格式保存。我一直在尝试修改一个脚本,该脚本通过用户名标识文件,然后将其移动到同一位置内各自的文件夹中。它“运行”时没有注意到错误,但文件不会

以下是我设置的广泛范围;用户填写新潜在客户的谷歌表格。从链接的电子表格中,特定信息被记录到谷歌文档中,并保存到谷歌硬盘的文件夹中。该目标文件夹本质上是将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); 
  }
}