Google Docs API v1 - 如何创建列表嵌套元素?

Google Docs API v1 - how to create list nested element?

所以有这个例子:https://developers.google.com/docs/api/how-tos/lists

如何制作嵌套列表元素?那么添加 Sub-Item One 的例子会怎样?

至于 Google 文档 API 的第 1 版,它相当复杂。我发现的最佳方法是将文档创建过程分为两个阶段:

  1. 将缩进文本与命名范围一起放置
  2. 样式命名范围

第一阶段和第二阶段文档正在客户端刷新,命名范围已重新计算到位置。多亏了这个设计,我才能完成这一切。重要的技巧是在第 1 阶段按照教程中的建议以相反的顺序发送所有请求。

第 1 阶段请求大致如下所示:

requests.add(
            new Request()
                    .setCreateNamedRange(
                            new CreateNamedRangeRequest()
                                    .setName(rangeName)
                                    .setRange(
                                            new Range()
                                                    .setStartIndex(1)
                                                    .setEndIndex(outputText.length() + 1))));
    requests.add(
            new Request()
                    .setInsertText(
                            new InsertTextRequest()
                                    .setText(outputText)
                                    .setLocation(new Location().setIndex(1))));

请注意,命名范围请求是在插入文本之前创建的。准备好所有请求后,阶段 1 结束,并且在它们被撤销后,命名范围请求被正确地应用于刚刚插入的一段文本。

另一个重要的是rangeName参数。对于单行类型的文本(标题、headers 等)我不太在意,我将它们命名为 html-ish(标题、h1、h2、p)。对于多行部分(如问题中的项目符号列表),重要的是用唯一名称命名每个多行部分。因此,如果我的文档中有 3 个列表,每个列表中的每一行都将使用 rangeName = "l" + x 创建,因此列表 1 中的每一行都将命名范围命名为 l1,列表 2 中的每一行将命名范围命名为 l2 等等。

然后是第 2 阶段。对于单行范围:

List<MyRange> myRanges = GoogleContentCreator.countSingleRanges(document, rangeName);
    if (myRanges != null) {
        List<Request> requests = new ArrayList<>();
        for (MyRange myRange : myRanges) {
            requests.add(new Request().setUpdateParagraphStyle(new UpdateParagraphStyleRequest()
                    .setRange(new Range()
                            .setStartIndex(myRange.getStart())
                            .setEndIndex(myRange.getEnd()))
                    .setParagraphStyle(new ParagraphStyle()
                            .setNamedStyleType(namedStyleType))
                    .setFields("namedStyleType")
            ));
        }
        return requests;
    }

对于多行范围(此处明确列出项目符号):

MyRange range = GoogleContentCreator.countListRange(document, rangeName);
    if (range != null) {
        List<Request> requests = new ArrayList<>();
        requests.add(new Request().setCreateParagraphBullets(
                new CreateParagraphBulletsRequest()
                        .setRange(new Range()
                                .setStartIndex(range.getStart())
                                .setEndIndex(range.getEnd()))
                        .setBulletPreset("BULLET_DISC_CIRCLE_SQUARE")));
        return requests;
    }

关键是 countSingleRanges(...)countListRange(...) 方法。我没有粘贴实现,因为它非常混乱,但核心概念是 countListRange(...) returns 一个范围,它从第一次出现的 rangeName 标签开始,到最后一次出现的 rangeName 结束] 标签。另一方面,countSingleRanges(...) returns 范围列表与它们在文档中的位置完全相同。

在所有这些操作文档得到正确的格式和样式之后。

到目前为止,我无法在 Google 文档 API 中工作的一件事是表格,但这不是这个问题的范围。