我在抓取 XML 附件并将其保存到 Google 驱动器文件夹时遇到问题

问题描述

当我在网上查看时,我发现了一个我一直用作参考的脚本。我无法使用 copyBlob 命令来获取我需要的 XML 数据。我所需要的只是将此附件保存到特定的驱动器文件夹中。我不断收到 Type 错误文件夹。CreateFiles 不是函数。我想我也可能措辞错误,因为我相信它会在我的驱动器中创建一个文件夹,而我只想将其保存到特定文件夹中。我只是想将这些材料保存在一种便于以后参考的形式中,这就是我使用 copyBlob 的原因。我错过了什么吗?我不认为将附件保存到文件夹中会如此棘手。



{{1}}


解决方法

您当前的代码中有 2 个问题:

  1. 您使用了 DriveApp.getFoldersByName(name),它将返回一个 FolderIterator,它是用户驱动器中所有具有给定名称的文件夹的集合,它是具有给定名称的文件夹数组。

解决方案:

如果您已有要保存附件的特定文件夹,请改用 DriveApp.getFolderById(id)。您只需要提供您可以在文件夹的 url 链接中获取的文件夹 ID。

驱动器文件夹 URL 示例:

https://drive.google.com/corp/drive/folders/1lFzVvlBnBi-2o1VQGF5JDFxxxxxxx?resourcekey=0-ovPPl55Wxxxxxxx

文件夹 id 将是“文件夹/”之后和“?”之前的文本https://drive.google.com/corp/drive/folders/<Folder Id>?resourcekey=0-ovPPl55Wxxxxxxx

  1. Class FolderClass FolderIterator 都没有 createFiles() 方法。应该是 Folder.createFile(blob)

示例代码:

function saveAttachmentInFolder(){
  var folder = DriveApp.getFolderById('1QHe2zCebXBZxiplAfVZpOxxxxxx');
  var userId = "abc123@xxxxx.com";
  var query = "label:ToBeProcessedByGAS";
  var res = Gmail.Users.Messages.list(userId,{q: query});
  Logger.log(res);

  if(res.resultSizeEstimate >0){
    res.messages.forEach(function(m){
      var attA=GmailApp.getMessageById(m.id).getAttachments();
      Logger.log(attA);
      attA.forEach(function(a){
        var ts=Utilities.formatDate(new Date(),Session.getScriptTimeZone(),"yyMMddHHmmss");
        folder.createFile(a.copyBlob()).setName(a.getName()+ts);
      });
    });
  }
};

输出:

enter image description here