如果合并和导出函数 运行 来自同一 Apps 脚本函数,则导出的 PDF 为空白
Exported PDF is blank if merge and export functions are run from the same Apps Script function
我有将多个 Google 文档合并到一个文件中的代码,以及将文档另存为 PDF 的代码:
function createPDF(docId) {
var docFile = DriveApp.getFileById(docId);
var blob = docFile.getAs('application/pdf');
var file = DriveApp.createFile(blob);
file.setName('test.pdf');
}
function mergeDocuments(doc, docIDs){
var body = doc.getActiveSection();
for (var i = 0; i < docIDs.length; ++i ) {
var otherBody = DocumentApp.openById(docIDs[i]).getActiveSection();
var totalElements = otherBody.getNumChildren();
for( var j = 0; j < totalElements; ++j ) {
var element = otherBody.getChild(j).copy();
var type = element.getType();
if( type == DocumentApp.ElementType.PARAGRAPH )
body.appendParagraph(element);
else if( type == DocumentApp.ElementType.TABLE )
body.appendTable(element);
else if( type == DocumentApp.ElementType.LIST_ITEM )
body.appendListItem(element);
else
throw new Error("Unknown element type: "+type);
}
}
}
mergeDocument()
函数可以很好地合并文档,createPDF()
函数也可以很好地工作 - 如果我一个一个地使用它们。如果我将它们组合成一个调用,那么导出的 PDF 将始终为空白。
function mergeAndCreatePDF() {
var doc = DocumentApp.create('test.doc');
var docIDs = ['docid0', 'docid1'];
mergeDocuments(doc, docIDs);
Logger.log(doc.getId())
var docFile = DriveApp.getFileById('' + doc.getId());
var blob = docFile.getAs('application/pdf');
var file = DriveApp.createFile(blob);
file.setName('test.pdf');
}
我如何将这两种方法结合起来,以便将它们用于 Apps 脚本(而不是需要 运行 一个,然后 运行 另一个)?
我认为发生这种情况是因为您没有保存和关闭文档。
看看这个https://developers.google.com/apps-script/reference/document/document#saveandclose
并尝试在 mergeDocuments 函数结束时关闭您的文档。
tehhowch 也在评论中解释了这一点,他也有一些功劳。 :)
我有将多个 Google 文档合并到一个文件中的代码,以及将文档另存为 PDF 的代码:
function createPDF(docId) {
var docFile = DriveApp.getFileById(docId);
var blob = docFile.getAs('application/pdf');
var file = DriveApp.createFile(blob);
file.setName('test.pdf');
}
function mergeDocuments(doc, docIDs){
var body = doc.getActiveSection();
for (var i = 0; i < docIDs.length; ++i ) {
var otherBody = DocumentApp.openById(docIDs[i]).getActiveSection();
var totalElements = otherBody.getNumChildren();
for( var j = 0; j < totalElements; ++j ) {
var element = otherBody.getChild(j).copy();
var type = element.getType();
if( type == DocumentApp.ElementType.PARAGRAPH )
body.appendParagraph(element);
else if( type == DocumentApp.ElementType.TABLE )
body.appendTable(element);
else if( type == DocumentApp.ElementType.LIST_ITEM )
body.appendListItem(element);
else
throw new Error("Unknown element type: "+type);
}
}
}
mergeDocument()
函数可以很好地合并文档,createPDF()
函数也可以很好地工作 - 如果我一个一个地使用它们。如果我将它们组合成一个调用,那么导出的 PDF 将始终为空白。
function mergeAndCreatePDF() {
var doc = DocumentApp.create('test.doc');
var docIDs = ['docid0', 'docid1'];
mergeDocuments(doc, docIDs);
Logger.log(doc.getId())
var docFile = DriveApp.getFileById('' + doc.getId());
var blob = docFile.getAs('application/pdf');
var file = DriveApp.createFile(blob);
file.setName('test.pdf');
}
我如何将这两种方法结合起来,以便将它们用于 Apps 脚本(而不是需要 运行 一个,然后 运行 另一个)?
我认为发生这种情况是因为您没有保存和关闭文档。
看看这个https://developers.google.com/apps-script/reference/document/document#saveandclose
并尝试在 mergeDocuments 函数结束时关闭您的文档。
tehhowch 也在评论中解释了这一点,他也有一些功劳。 :)