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 屬性。這些值表示元素開頭和結尾的偏移量,相對於封閉區隔的開頭。如要進一步瞭解如何排序批次文件 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 繼承的預設格式。反之,您未設定的任何格式設定功能,都會繼續沿用段落樣式。