锁定 Google Apps 脚本执行直到文本被替换

Lock Google Apps script execution until text has been replaced

我目前正在使用 Google Apps 脚本在 Google 文档中执行以下任务:

我遇到的问题是导出过程发生在文档正文中的文本更新之前。我的问题是:

如何在文档中的文本被替换之前停止执行将文档导出为 PDF?

我在下面附上了我的代码的简化版本:

function replaceTextAndExportToPDF() {
    var doc = DocumentApp.getActiveDocument();

    // [Start block]

    // Clear the text surrounding "Apps Script", with or without text.
    var body = doc.getBody();
    body.replaceText("^.*Apps ?Script.*$", "Apps Script");

    // [End block -  Need to finish code inside this block before continuing]

    // Now export to PDF
    var parentFolder = DriveApp.getFileById(doc.getId()).getParents().next();
    var pdfBlob = doc.getBlob().getAs('application/pdf');
    parentFolder.createFile(pdfBlob)
}

我已经尝试使用 Lock Class 进行测试,但对它的工作原理知之甚少并且没有取得任何成功

对于您的情况,可以使用 saveAndClose().

解决问题

修改点:

请修改如下

从 :
var parentFolder = DriveApp.getFileById(doc.getId()).getParents().next();
var pdfBlob = doc.getBlob().getAs('application/pdf');
parentFolder.createFile(pdfBlob)
到 :
var parentFolder = DriveApp.getFileById(doc.getId()).getParents().next();
doc.saveAndClose(); // Added
var pdfBlob = doc.getBlob().getAs('application/pdf');
parentFolder.createFile(pdfBlob)

注:

  • 对于文档和幻灯片,它使用 saveAndClose()
  • 对于电子表格,它使用 flush()

参考资料:

已添加:

当使用 getBlob() 从文档中检索 blob 时,blob 的 mimeType 是 "application/pdf"。所以你也可以使用 var pdfBlob = doc.getBlob(); 而不是 var pdfBlob = doc.getBlob().getAs('application/pdf');.

编辑:

例如,您可以通过 Logger.log(doc.getBlob().getContentType()) 检索 doc.getBlob() 的 blob 的 mimeType。它显示 application/pdf。我认为当 Google 文档作为 blob 检索时,默认的 mimeType 是 application/pdf

但是您可以从 Google 文档中检索其他 mimeType。您可以使用 GET https://www.googleapis.com/drive/v3/about?fields=exportFormats&key={YOUR_API_KEY} 检索可以导出的格式。 Google文档导出格式如下

"application/vnd.google-apps.document": [
 "application/rtf",
 "application/vnd.oasis.opendocument.text",
 "text/html",
 "application/pdf",
 "application/epub+zip",
 "application/zip",
 "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
 "text/plain"
],

从此对象,Google 无法将文档导出为 application/vnd.google-apps.document。认为这是规范。