问题描述
当我在网上查看时,我发现了一个我一直用作参考的脚本。我无法使用 copyBlob 命令来获取我需要的 XML 数据。我所需要的只是将此附件保存到特定的驱动器文件夹中。我不断收到 Type 错误文件夹。CreateFiles 不是函数。我想我也可能措辞错误,因为我相信它会在我的驱动器中创建一个文件夹,而我只想将其保存到特定文件夹中。我只是想将这些材料保存在一种便于以后参考的形式中,这就是我使用 copyBlob 的原因。我错过了什么吗?我不认为将附件保存到文件夹中会如此棘手。
{{1}}
解决方法
您当前的代码中有 2 个问题:
- 您使用了 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
-
Class Folder 和 Class 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);
});
});
}
};