因此有一个示例:https://developers.google.com/docs/api/how-tos/lists
如何制作嵌套列表元素?那么添加Sub-Item One
的示例看起来如何?
答案 0 :(得分:0)
对于Google Docs 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
参数。对于文本的单行类型(标题,标题等),我不在乎,我将它们命名为html-ish(标题,h1,h2,p)。在多行部分的前面(例如问题的项目符号列表),用唯一的名称命名每个多行部分很重要。因此,如果我的文档中有3个列表,则每个列表中的每一行都将使用rangeName = "l" + x
创建,因此列表1中的每一行都将命名为l1
,而列表2中的每一行都将命名为range名为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(...)
返回一个范围,该范围取第一次出现的rangeName
标签的开始和最后一次出现的rangeName
标签的结束。另一方面,countSingleRanges(...)
返回的范围列表与放置在文档中的范围完全相同。
所有此操作文档正确格式化和设置样式之后。
到目前为止,我无法在Google Docs API中使用的一件事是表格,但是无论如何这都不是这个问题的范围。