代码之家  ›  专栏  ›  技术社区  ›  ScottMcC

锁定Google应用程序脚本执行,直到替换文本

  •  3
  • ScottMcC  · 技术社区  · 7 年前

    我目前正在使用谷歌应用程序脚本在谷歌文档中执行以下任务:

    • 打开具有给定ID的Google文档
    • 替换文档中的某些文本
    • 将文档导出为PDF

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

    在文档中的文本被替换之前,如何停止将文档导出为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 但是对它的工作原理知之甚少,而且还没有取得任何成功

    1 回复  |  直到 7 年前
        1
  •  1
  •   Tanaike    7 年前

    在您的情况下,可以使用 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)
    

    注:

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

    参考文献:

    补充:

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

    编辑:

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

    但是你可以从谷歌文档中检索其他的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 . 我们认为这是一个规范。