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 阶段按照教程中的建议以相反的顺序发送所有请求。
第 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 中工作的一件事是表格,但这不是这个问题的范围。
所以有这个例子:https://developers.google.com/docs/api/how-tos/lists
如何制作嵌套列表元素?那么添加 Sub-Item One
的例子会怎样?
至于 Google 文档 API 的第 1 版,它相当复杂。我发现的最佳方法是将文档创建过程分为两个阶段:
- 将缩进文本与命名范围一起放置
- 样式命名范围
第一阶段和第二阶段文档正在客户端刷新,命名范围已重新计算到位置。多亏了这个设计,我才能完成这一切。重要的技巧是在第 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 中工作的一件事是表格,但这不是这个问题的范围。