Кажется довольно громоздким, списки составлены из ListItems, но, похоже, нет объекта List.Существует ListId, но он, похоже, не имеет никакой реальной функции, кроме того, что вы можете разделить свой список и продолжить номера.Похоже, вы можете только добавить ListItem к телу, но, похоже, нет простого способа получить индекс для ListItem, чтобы вы могли добавить после него.
Я написал функциюон будет перебирать все элементы в теле, чтобы найти ListItem с некоторым текстом-заполнителем и вернуть его индекс.
function findListItemWithText(text) {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var index = -1;
for (var i=0; i<body.getNumChildren(); i++) {
var child = body.getChild(i);
if (child.getType() == DocumentApp.ElementType.LIST_ITEM) {
var listItem = child.asListItem();
if (listItem.getText() == text) {
index = i;
}
}
}
return index;
}
Затем я написал функцию, которая заменит ListItem на элементы в массиве:
function replaceListItem (placeholder, list) {
var index = findListItemWithText(placeholder);
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var listItem = body.getChild(index).asListItem();
// replace the text in the placeholder ListItem
listItem.setText(list[0]);
// append the rest of the list after the placeholder ListItem
for (var i=1; i<list.length; i++) {
body.insertListItem(index + i, list[i]);
}
}
Затем вы можете вызвать эту функцию с заполнителем и списком, и если естьэто ListItem с этим текстом, он добавит ListItems список в этой точке.
replaceListItem("{{list}}", ["One", "Two", "Three"]);
Работает для нумерованных и маркированных списков.Если будет два или более заполнителя, он просто заменит последний.
Если кто-то может критиковать это, мне было бы интересно услышать о более эффективных способах поиска и манипулирования данным элементом, как это кажется моим решением.гораздо больше усилий, чем я ожидал.