锁定 Google Apps 脚本执行直到文本被替换
Lock Google Apps script execution until text has been replaced
我目前正在使用 Google Apps 脚本在 Google 文档中执行以下任务:
- 打开给定 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 进行测试,但对它的工作原理知之甚少并且没有取得任何成功
对于您的情况,可以使用 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
。认为这是规范。
我目前正在使用 Google Apps 脚本在 Google 文档中执行以下任务:
- 打开给定 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 进行测试,但对它的工作原理知之甚少并且没有取得任何成功
对于您的情况,可以使用 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
。认为这是规范。