为什么Google Apps Script中getBlob()无法获取Google Doc最新版本?
问题原因
写入Google Doc的改动默认会先暂存在Apps Script的本地内存中,没有实时同步到云端,直接调用Document实例的getBlob()方法会读取到缓存的旧版本内容,你看到云端内容已更新是因为后台异步同步已经完成。
解决方法
- 强制提交本地改动到云端
所有文档内容插入操作完成后,调用doc.saveAndClose()方法,将内存中所有未提交的改动同步到Google云端硬盘,同时关闭当前文档实例。如果后续还需要操作该文档,可通过DocumentApp.openById(doc.getId())重新打开实例。 - 从云端直接拉取最新文件流
不要使用Document实例的getBlob()方法,改为通过DriveApp读取云端最新的文件内容,完全规避本地缓存影响,如果需要输出PDF可以显式指定MIME类型:
// 完成所有文档写入操作后执行 doc.saveAndClose(); // 可选:如果偶发还是拿到旧内容,可加1.5秒等待给云端同步预留缓冲时间 // Utilities.sleep(1500); // 从Drive读取最新版本的文档,转成PDF blob const latestDocBlob = DriveApp.getFileById(doc.getId()) .getAs(MimeType.PDF) .setName("自定义文件名.pdf"); // 发送邮件 MailApp.sendEmail({ to: email, subject: "Subject line", body: "Body", attachments: [latestDocBlob] })
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

