为了有效地使用 Google Docs API,您必须了解 Google 文档的架构和构成文档的元素,以及它们之间的关系。本页详细介绍了以下主题:
- 文档元素的概念模型
- Docs API 如何表示这些元素
- 元素的样式属性
顶级元素
Google 文档中最外层的容器元素是文档。这是可以保存到 Google 云端硬盘、与其他用户共享以及使用文字和图片更新的单元。
documents
资源的顶级元素包括其 Tab
、SuggestionsViewMode
和其他属性:
document: { title: ... , revisionId: ... , documentId: ... , suggestionsViewMode: ... , tabs: ... }
标签页
单个文档可以包含多个标签页,这些标签页具有不同的文本级内容。文档的 tabs
属性是 Tab
对象的序列。Tab
由以下字段组成:
TabProperties
:包含标签页的属性,例如 ID、标题和索引。childTabs
:公开标签页的子标签页(直接嵌套在其下方的标签页)。DocumentTab
:表示标签页的文本内容。
后面的部分简要介绍了文档标签页层次结构;标签页 JSON 表示法也提供了更详细的信息。如需详细了解标签页功能,请参阅使用标签页。
如需在 Body
内容之外操作全局文档标签页功能,最好使用一个或多个文档模板,您可以将这些模板作为以编程方式生成新文档的基础。如需了解详情,请参阅将文本合并到文档中。
正文内容
Body
通常包含文档标签页的完整内容。您可以通过编程方式使用的大部分项(或您可能想要使用的项)都是 Body
内容中的元素:
结构元素
StructuralElement
用于描述为文档提供结构的内容。Body
内容是一系列 StructuralElement
对象。内容元素可用于个性化设置每个 StructuralElement
对象,如下图所示:
结构元素及其内容对象包含文档中的所有视觉组件。这包括文本、内嵌图片和格式。
段落结构
Paragraph
是表示段落的 StructuralElement
。它包含一系列以换行符结尾的内容。它由以下对象组成:
ParagraphElement
:描述段落中的内容。ParagraphStyle
:一个可选元素,用于明确设置段落的样式属性。Bullet
:如果段落是列表的一部分,则为提供项目符号规范的可选元素。
ParagraphElement
的工作方式类似于 StructuralElement
。一组内容元素类型(例如 ColumnBreak
和 Equation
)会个性化自己的 ParagraphElement
,如下图所示:
如需查看完整文档结构的示例,请参阅 JSON 格式的文档示例。在输出中,您可以看到许多关键的结构和内容元素,以及开始和结束索引的使用,如后续部分所述。
文本运行
TextRun
是一种 ParagraphElement
,表示具有相同文本样式的连续文本字符串。一个段落可以包含多个文本运行,但文本运行绝不会跨越段落边界。内容在换行符后拆分,以形成单独的文本运行。例如,假设有一个如下所示的小文档:

下图展示了如何直观呈现上述文档中的段落序列,每个段落都有自己的 TextRun
和可选的 Bullet
设置。
AutoText
AutoText
是一个 ParagraphElement
,表示文本中会动态替换为随时间变化的内容的位置。在 Google 文档中,此属性用于页码。
起始索引和结束索引
当您更新文档标签页的内容时,每次更新都会在文档中的某个位置或某个范围内进行。这些位置和范围使用索引指定,索引表示包含文档段内的偏移量。段落是指包含结构元素或内容元素的正文、页眉、页脚或脚注。细分中元素的索引相对于该细分的开头。
正文内容中的大多数元素都具有从零开始的 startIndex
和 endIndex
属性。这些属性用于指示元素开始和结束相对于其封闭区段开始的偏移量。如需详细了解如何对批量 Docs API 调用进行排序,请参阅批量更新。
索引以 UTF-16 代码单元为单位进行衡量。这意味着代理项对会占用两个索引。例如,“GRINNING FACE”表情符号 😄 表示为 \uD83D\uDE00
,占用两个索引。
对于文档正文中的元素,索引表示相对于正文内容(即“根”元素)开头的偏移量。
结构化元素的“个性化”类型(SectionBreak
、TableOfContents
、Table
和 Paragraph
)没有这些索引,因为它们的封装元素 StructuralElement
具有这些字段。对于 ParagraphElement
中包含的个性化类型(例如 TextRun
、AutoText
和 PageBreak
),也是如此。
访问元素
许多元素都可以使用 documents.batchUpdate
方法进行修改。例如,使用 InsertTextRequest
,您可以更改包含文本的任何元素的内容。同样,您可以使用 UpdateTextStyleRequest
对一个或多个元素中包含的一段文本应用格式。
如需读取文档的元素,请使用 documents.get
方法获取完整文档的 JSON 转储。然后,您可以解析生成的 JSON,以查找各个元素的值。如需了解详情,请参阅以 JSON 格式输出文档内容。
解析内容对于各种使用情形都很有用。例如,假设有一个文档编目应用,用于列出其找到的文档。此应用可以提取文档标签页的标题、修订版本 ID 和起始页码,如下图所示:
由于没有用于显式读取这些设置的方法,因此您的应用需要获取整个文档,然后解析 JSON 以提取这些值。
媒体资源继承
StructuralElement
可以从其父对象继承属性。对象的属性(包括其定义的属性和继承的属性)决定了其最终的视觉外观。
文本字符格式决定了文本在文档中的呈现方式,例如粗体、斜体和下划线。您应用的格式会替换从底层段落的 TextStyle
继承的默认格式。
相反,您未设置格式的任何字符都将继续沿用段落的样式。
段落格式决定了文本块在文档中的呈现方式,例如对齐方式、边框和缩进。您应用的格式会替换从底层 ParagraphStyle
继承的默认格式。
相反,您未设置的任何格式设置功能都会继续沿用段落样式。