Экспортированный PDF будет пустым, если функции слияния и экспорта выполняются из одной и той же функции скрипта приложения. - PullRequest
0 голосов
/ 07 мая 2018

У меня есть код, который объединяет несколько Документов 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');
} 

Как объединить два метода, чтобы их можно было использовать в одной банке для скрипта приложений (вместо того, чтобы запускать один, а затем запускать другой)?

1 Ответ

0 голосов
/ 07 мая 2018

Я думаю, что это происходит потому, что вы не сохраняете и не закрываете документы.

Проверьте это https://developers.google.com/apps-script/reference/document/document#saveandclose

И попробуйте закрыть свой документ в конце функции mergeDocuments.

Тех, кто объяснил это в комментариях, тоже заслуживает уважения. :)

...