#google-apps-script
Вопрос:
Я использую скрипт приложения Google для программного создания документа. Я не могу найти способ установить «продолжить» с помощью сценария приложения. Используя пользовательский интерфейс, этот параметр присутствует в разделе Формат > Межстрочный интервал >> Сохранить со следующим>>, но я не могу найти метод абзаца, чтобы имитировать его с помощью кода.
Вот мой код. Данные содержат массив объектов, которые необходимо отобразить в виде вложенного списка.
data.items.forEach(({ item, options }) => {
let elements = [];
let itemTextClone = tpl.getListItems()[0].copy();
itemTextClone.setText(item);
elements.push(body.appendListItem(itemTextClone).setGlyphType(DocumentApp.GlyphType.NUMBER));
options.forEach((option) => {
let itemOptClone = tpl.getListItems()[1].copy()
itemOptClone.setText(option);
elements.push(body.appendListItem(itemOptClone).setGlyphType(DocumentApp.GlyphType.LATIN_LOWER));
});
// ///////////////////////////////////////////////////////////////////////////////
// HERE I WOULD LIKE TO APPLY "KEEP WITH NEXT" to all elements except the last one
// ///////////////////////////////////////////////////////////////////////////////
elements.slice(0,-1).foreach((element) => ?????? )
});
Комментарии:
1. Похоже, что эта функция не была реализована в сценарии приложений ? API документов (пока). Вы можете подать запрос на функцию для этого.
Ответ №1:
Это можно сделать, если включить службу расширенных документов.
Объект ParagraphStyle позволяет использовать это поле keepWithNext
.
Чтобы выполнить запрос UpdateParagraphStyleRequest, вам нужно знать startIndex
и endIndex
соответствующего абзаца. Вы можете получить это по телефону Docs.Document.get(YOUR_DOCUMENT_ID)
. Возвращаемое .body.content
поле представляет собой массив элементов, каждый из которых содержит startIndex
и endIndex
. Эта функция обновляет один абзац:
function setKeepWithNext(docId, elementIndex)
{
var doc = Docs.Documents.get(docId)
var paragraph = doc.body.content[elementIndex]
// You can construct an array of these requests and pass them all at once to batchUpdate:
var request = {
"updateParagraphStyle": {
"paragraphStyle": {
"keepWithNext": true,
},
"fields": "keepWithNext",
"range": {
// "segmentId": "", // An empty segment ID signifies the document's body.
"startIndex": paragraph.startIndex,
"endIndex": paragraph.endIndex
}
}
}
Docs.Documents.batchUpdate({ 'requests': [request] }, docId)
}
Возможно, вам придется проверить результаты Docs.Document.get()
, чтобы определить диапазон elementIndex
значений, которые будут использоваться для ваших конкретных абзацев. Кажется , что эти индексы должны соответствовать индексу, возвращаемому body.getChildIndex(element)
, но, судя по проверке, это не так.