Google 文件架構

如要有效使用 Google 文件 API,您必須瞭解 Google 文件文件的架構、組成文件的元素,以及這些元素之間的關係。本頁提供下列主題的詳細說明:

  • 文件元素的概念模型
  • Docs API 如何呈現這些元素
  • 元素的樣式屬性

頂層元素

Google 文件中最外層的容器元素是文件。這個單元可以儲存在 Google 雲端硬碟中、與其他使用者共用,以及透過文字和圖片更新。

documents 資源的頂層元素包括其 TabSuggestionsViewMode 和其他屬性:

document: {
    title: ... ,
    revisionId: ... ,
    documentId: ... ,
    suggestionsViewMode: ... ,
    tabs: ...
}

分頁

單一文件可包含多個分頁,且每個分頁的文字層級內容皆不同。文件的 tabs 屬性是 Tab 物件的序列。Tab 包含下列欄位:

  • TabProperties:包含分頁的屬性,例如 ID、標題和索引。
  • childTabs:公開分頁的子分頁 (直接位於其下方巢狀分頁)。
  • DocumentTab:代表分頁的文字內容。
文件分頁的結構。
圖 1. 文件分頁結構。

後續章節會提供文件分頁階層的簡要總覽;分頁 JSON 表示法也提供更詳細的資訊。如要進一步瞭解分頁功能,請參閱「使用分頁」。

如要操控 Body 內容以外的全域文件分頁功能,建議您使用一或多個文件範本,以便透過程式碼產生新文件。詳情請參閱將文字合併至文件

內文

Body 通常包含文件分頁的完整內容。您可以或可能想要以程式輔助方式使用的項目,大多是 Body 內容中的元素:

內文的結構。
圖 2. 內文結構。

結構元素

StructuralElement 會說明為文件提供結構的內容。Body 內容是 StructuralElement 物件的序列。內容元素可為每個 StructuralElement 物件提供個人化服務,如以下圖表所示:

結構元素。
圖 3. 結構元素。

結構元素及其內容物件包含文件中的所有視覺元件。包括文字、內嵌圖片和格式。

段落結構

Paragraph 是代表段落的 StructuralElement。其中包含一系列以換行字元結尾的內容。其由以下物件組成:

  • ParagraphElement:說明段落內的內容。
  • ParagraphStyle:可選元素,可明確設定段落的樣式屬性。
  • Bullet:如果段落是清單的一部分,則為提供項目符號規格的選用元素。

ParagraphElement 的運作方式類似 StructuralElement。一組內容元素類型 (例如 ColumnBreakEquation) 可自訂自己的 ParagraphElement,如下圖所示:

段落元素的結構。
圖 4 段落元素的結構。

如需完整文件結構的範例,請參閱 JSON 格式的文件範例。在輸出內容中,您可以看到許多重要的結構和內容元素,以及如何使用開始和結束索引,詳情請參閱下一個章節。

文字行

TextRunParagraphElement,代表文字樣式相同的連續字串。段落可以包含多個文字行程,但文字行程絕不會跨越段落邊界。內容會在換行字元後分割,形成個別的文字行。例如,假設有一份小型文件,如下所示:

包含段落和項目符號清單的小型文件。
圖 5 小型文件。

下圖顯示如何將上方文件中的段落順序視覺化,每個段落都有自己的 TextRun 和選用的 Bullet 設定。

文字執行的結構。
圖 6 文字行結構。

AutoText

AutoTextParagraphElement,代表文字中的某個位置,會動態替換為可能隨時間變更的內容。在 Google 文件中,這個屬性用於頁碼。

起始與結束索引

當你更新文件分頁的內容時,每項更新都會在文件中的位置或範圍內進行。這些位置和範圍會使用索引指定,代表包含文件區段中的偏移量。片段是指包含結構或內容元素的主體、標頭、頁尾或附註。區隔中的元素索引與該區段的開頭相關。

主體內容中的大多數元素都具有以零為基底的 startIndexendIndex 屬性。這些值會指出元素開頭和結尾的偏移量,相對於所屬封閉區段的開頭。如要進一步瞭解如何訂購批次 Docs API 呼叫,請參閱「批次更新」。

索引是以 UTF-16 程式碼單位計算。這表示代理配對會消耗兩個索引。舉例來說,「GRINNING FACE」表情符號 😄? 會以 \uD83D\uDE00 表示,並使用兩個索引。

對於文件內文中的元素,索引代表與主體內容 (「根」元素) 開頭的偏移情形。

結構元素的「個人化」類型 (SectionBreakTableOfContentsTableParagraph) 沒有這些索引,因為包裝這些類型的 StructuralElement 包含這些欄位。這也適用於 ParagraphElement 中包含的個人化類型,例如 TextRunAutoTextPageBreak

存取元素

許多元素都可以透過 documents.batchUpdate 方法進行修改。舉例來說,您可以使用 InsertTextRequest 變更任何包含文字的元素內容。同樣地,您也可以使用 UpdateTextStyleRequest 將格式套用至一或多個元素中包含的文字範圍。

如要讀取文件的元素,請使用 documents.get 方法取得完整文件的 JSON 轉儲檔案。接著,您可以剖析產生的 JSON,找出個別元素的值。詳情請參閱「將文件內容輸出為 JSON」。

剖析內容可用於各種用途。舉例來說,假設有一個文件目錄應用程式,列出所找到的文件。此應用程式可擷取文件分頁的標題、修訂版本 ID 和起始頁碼,如下圖所示:

文件目錄的結構。
圖 7.文件目錄的結構。

由於沒有明確讀取這些設定的方法,因此應用程式需要取得整份文件,然後剖析 JSON 來擷取這些值。

資源繼承

StructuralElement 可從其父項物件繼承屬性。物件的屬性 (包括其定義的屬性和繼承的屬性) 會決定其最終的視覺外觀。

文字字元格式會決定文字在文件中顯示的方式,例如粗體、斜體和底線。您套用的格式會覆寫從底層段落的 TextStyle 繼承的預設格式。反之,未設定格式的字元都會沿用段落樣式。

段落格式會決定文件中文字塊的顯示方式,例如對齊方式、邊框和縮排。您套用的格式會覆寫從基礎 ParagraphStyle 繼承的預設格式。相反地,未設定的格式設定功能會繼續繼承段落樣式。