Измените тип абзаца на тип элемента списка с помощью GAS

#google-apps-script #google-docs #google-docs-api

#google-apps-script #google-docs #google-docs-api

Вопрос:

Я хочу изменить тип абзаца на тип списка из тех, которые начинаются с ##.

Документ docs находится здесь

Я пытался с

 function doGet(e) {
    var doc = DocumentApp.openByUrl('https://docs.google.com/document/d/1TRo9RG6R2ZOBqXQEJtBhRBLKzu9XOlFycamYplkma14/edit');
    var body = doc.getBody();
    var paras = body.getParagraphs();
    for (var i = 0; i < paras.length; i  ) {
        if (paras[i].editAsText().getText().indexOf("##") == 0) {
            //var listItem = body.insertListItem(childIndex, listItem)
            var text = paras[i].editAsText().getText()
            var childIndex = body.getChildIndex(paras[i])
            var element = body.removeChild(paras[i])
            element.appendListItem(text).setGlyphType(DocumentApp.GlyphType.BULLET)
        }
    }
    return ContentService.createTextOutput("Success"   body.getChildIndex(paras[3]));
}
  

Ответ №1:

Вы почти на месте. Но я бы рассматривал Body.insertListItem() метод, а не Body.appendListItem() тот.

Вы могли бы, например, изменить свой цикл for на следующий:

 for (var i = 0; i < paras.length; i  ) {
  if (paras[i].editAsText().getText().indexOf("##") == 0) {
    // This element is a future list item
    var elem = paras[i];
    // What's the text going to be?
    var text = elem.editAsText().getText()
    // Where will it be inserted?
    var childIndex = body.getChildIndex(elem)
    // I should remove the old element
    body.removeChild(elem)
    // And take it's place with this new one with Glyph.
    body.insertListItem(childIndex, text).setGlyphType(DocumentApp.GlyphType.BULLET)
  }
}
  

Ссылки: