@ axemonkey Ваше решение будет работать, но оно хрупкое, поскольку документация не гарантирует, что элемент абзаца всегда будет дочерним элементом с индексом 0. Перерыл документацию и нашел этот метод:
TabelCell::findElement(elementType)
Вы можете использовать этот метод для извлечения дочерних элементов данного типа.Он возвращает RangeElement
, который охватывает дочерний элемент, поэтому вам нужно вызвать следующий метод:
RangeElement::getElement()
Таким образом, используя вышеизложенное, более надежный способ получить элемент абзаца:
var paragraph = tableCell.findElement(DocumentApp.ElementType.PARAGRAPH).getElement();
Чтобы получить элемент Text
в абзаце, вы можете использовать findElement()
наЭкземпляр абзаца также:
var text = paragraph.findElement(DocumentApp.ElementType.TEXT).getElement();
Итак, собрав все это вместе, вы получите:
var paragraph = tableCell.findElement(DocumentApp.ElementType.PARAGRAPH).getElement();
var text = paragraph.findElement(DocumentApp.ElementType.TEXT).getElement();
var indices = text.getAttributeIndices();
Там есть больше кода для написания, но у вас будет больше читаемого кода и меньшескорее всего сломается, так как он не зависит от дочерних индексов.
PS: когда вы вызываете метод getElement()
для RangeElement
, он возвращает элемент, но что касается графического интерфейса приложения Scriptвы получаете автозаполнение только для свойств, связанных с интерфейсом Element
.Если вы хотите получить автозаполнение для свойств и методов, специфичных для данного типа элемента, используйте один из многих методов приведения типов, определенных в интерфейсе Element.Эти методы всегда имеют префикс as
.Таким образом, чтобы получить завершение кода для текстового элемента, вы можете написать код так:
var text = paragraph.findElement(DocumentApp.ElementType.TEXT).getElement().asText();