Я создал форму, используемую некоторыми пользователями в моей школе, которая загружает документ и создает новый форматированный документ со всеми загрузками, которые могут быть изображениями или другими документами. В данный момент у меня проблемы с одним файлом .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. Большое спасибо заранее, если вы можете дать мне любой совет. Рафаэль