Исключение при попытке получить дочерние элементы абзацев в скрипте приложений Google - PullRequest
1 голос
/ 28 апреля 2020

Я пытался разобраться с набором изображений в документе, используя скрипт Google Apps. Мне удается сделать то, что я хочу, то есть взять изображения из моего документа и поместить их в таблицу с двумя строками и столбцом, где первая строка содержит пространство для описания изображения, а вторая содержит само изображение. Однако у меня возникают трудности при просмотре абзацев моего документа, мой сценарий находит абзац без детей. Это сгенерировало исключение времени выполнения следующим образом: Исключение: дочерний индекс (0) должен быть меньше, чем количество дочерних элементов (0). Я пытался обработать это с помощью if (), но когда я достигаю пустой абзац, выдается то же исключение. Код моего скрипта приведен ниже:

function manipuleImage(){
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var paragraphs = body.getParagraphs();
  
  var imagens = body.getImages();
  var image = imagens[0];
  var typeImage = image.getType();

  for(var i = 0; i < paragraphs.length; i++){

    var paragraph = paragraphs[i];
    
     if(paragraph.getChild(0) != 0){
      var child = paragraph.getChild(0);
      var typeChild = child.getType();
    
      if(typeChild == "INLINE_IMAGE"){
      
         var cells = [
           [''],['']
         ]; 
  
         var styleCell = {};
         styleCell[DocumentApp.Attribute.FONT_SIZE] = 11;
         styleCell[DocumentApp.Attribute.BOLD] = true;
         styleCell[DocumentApp.Attribute.FOREGROUND_COLOR] = '#ffffff';
         styleCell[DocumentApp.Attribute.FONT_FAMILY]='Roboto';
         styleCell[DocumentApp.Attribute.VERTICAL_ALIGNMENT] = DocumentApp.VerticalAlignment.CENTER;
         styleCell[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT] = DocumentApp.HorizontalAlignment.CENTER;
  
       var tableImage = body.insertTable(i, cells)
       tableImage.getRow(0).getCell(0).setBackgroundColor("#ef5350");
       tableImage.setBorderColor("#ef5350");
       tableImage.setBorderWidth(1);
       tableImage.getRow(0).getCell(0).setAttributes(styleCell);
       tableImage.getRow(1).getCell(0).setAttributes(styleCell);
       tableImage.getRow(0).getCell(0).setTextAlignment(DocumentApp.TextAlignment.NORMAL);
       tableImage.getRow(1).getCell(0).setTextAlignment(DocumentApp.TextAlignment.NORMAL);
  
       var appendImage = tableImage.getRow(1).getCell(0).clear().appendImage(child.getBlob());
      
       var index = i + 1;
  
       body.removeChild(body.getChild(index));
  
       var imageH = appendImage.getHeight() / 2;
       var imageW = appendImage.getWidth() / 2;
    
       appendImage.setHeight(imageH).setWidth(imageW);
     }
    }
  }
}

1 Ответ

1 голос
/ 28 апреля 2020

Как насчет этой модификации?

Точки модификации:

  • getChild(childIndex) возвращает объект Element. Пожалуйста, будьте осторожны с этим.
  • В этом случае я думаю, что когда в абзаце есть только разрыв строки, возникает ошибка. Я думаю, что причина вашей проблемы может быть в следующем.

Если вы хотите пропустить абзац, в котором есть только разрыв строки, как насчет этой модификации?

Модифицированный скрипт:

Когда ваш скрипт изменяется, пожалуйста, измените его следующим образом.

С:
if(paragraph.getChild(0) != 0){
Кому:
if(paragraph.getNumChildren() != 0){

Ссылки:

...