Странная проблема с методом appendParagraph - PullRequest
1 голос
/ 18 января 2020

Я создал форму, используемую некоторыми пользователями в моей школе, которая загружает документ и создает новый форматированный документ со всеми загрузками, которые могут быть изображениями или другими документами. В данный момент у меня проблемы с одним файлом .docx, который содержит несколько списков, абзацев и 2 изображения внутри абзацев. Часть кода, которую я использую:

...

// Insert Google doc 
function insertGdoc(vdoc,IDgdoc,asignat)
{
  var Gdoc=DocumentApp.openById(IDgdoc).getBody();
  var vdoc_id=vdoc.getId();
  var docBody=vdoc.getBody();
  docBody.appendPageBreak();
  docBody.appendParagraph("Documento de "+asignat).setBold(false);
  docBody.appendHorizontalRule();

  var insertaBody = DocumentApp.openById(IDgdoc).getActiveSection();
  var numElements = insertaBody.getNumChildren();

  for( var jj = 0; jj < numElements; ++jj ) 
  {
    var element = insertaBody.getChild(jj).copy();
    var type = element.getType();

    try {
      if( type == DocumentApp.ElementType.PARAGRAPH )
      {
        docBody.appendParagraph(element.asParagraph());
      }
      else if( type == DocumentApp.ElementType.TABLE )
        docBody.appendTable(element);
      else if( type == DocumentApp.ElementType.HORIZONTAL_RULE)
        docBody.appendHorizontalRule();
      else if( type == DocumentApp.ElementType.PAGE_BREAK)
        docBody.appendPageBreak();
      else if( type == DocumentApp.ElementType.LIST_ITEM )
      {
        docBody.appendListItem(element);
        var glyphType = element.getGlyphType(); 
        element.setGlyphType(glyphType);
      }
    }
    catch (e)
    {
      Logger.log(e);
    }
  }    
}

// Insert MS Word doc
function insertDoc(vdoc,IDdoc,asignat)
{
  var docx = DriveApp.getFileById(IDdoc);
  var blob=docx.getBlob();
  var newDoc = Drive.newFile();
  var file=Drive.Files.insert(newDoc,blob,{convert:true});
  insertGdoc(vdoc,file.id,asignat);
}

...

После многих попыток я обнаружил, что элементы, вызывающие проблемы обе картинки. Используя try..catch, я могу избежать ошибки, не обрабатывая изображения, но окончательный документ является неполным. Я также пытался использовать Utilities.sleep, чтобы дать серверу больше времени для выполнения действий и даже для закрытия и повторного открытия документа, без изменений или худших результатов. Еще один вариант, который я обнаружил здесь в stackoverflow, состоял в том, чтобы попытаться добавить дочерние элементы из абзаца, различая, являются ли они изображениями, которые могли бы копировать первое из моих изображений (хотя с изменением размера и положения от оригинала), но не второе. Что больше всего раздражает, так это то, что этот сбой происходит, если я использую форму для выполнения всего процесса, но если я пытаюсь выполнить операцию вручную из консоли, она работает, и весь исходный документ с обоими изображениями копируется в окончательный вариант do c. Большое спасибо заранее, если вы можете дать мне любой совет. Рафаэль

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...