Google 文件架構

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

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

頂層元素

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

documents 資源的頂層元素包含 BodyHeaderFooter 和多個其他屬性:

document: {
    body: ... ,
    documentStyle: ... ,
    lists: ... ,
    documentId: ... ,
    namedStyles: ... ,
    revisionId: ... ,
    title: ...
}

如要操控 Body 內容以外的全域文件功能,建議您改用一或多個文件範本,以程式輔助方式產生新文件。詳情請參閱將文字合併至文件

身體內容

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

內文的結構。
圖 1. 主體內容的結構。

結構元素

StructuralElement 用於說明為文件提供結構的內容。Body 內容是一系列 StructuralElement 物件。內容元素可將每個 StructuralElement 物件個人化,如下圖所示:

結構元素。
圖 2. 結構元素。

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

段落結構

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

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

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

段落元素的結構。
圖 3. 段落元素的結構。

如需完整的文件結構範例,請參閱 JSON 格式的文件範例。輸出內容中會顯示許多重要的結構和內容元素,以及開始使用和結束索引,如下一節所述。

文字執行作業

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

含有段落和項目符號清單的小型文件。
圖 4 一個小型文件。

下圖說明如何以視覺化方式呈現上文中的段落序列,每個段落都有專屬的 TextRun 和選用的 Bullet 設定。

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

AutoText

AutoTextParagraphElement,代表文字中的一個位置,內容會隨著時間動態取代。在文件中,這用於頁碼。

起始與結束索引

更新文件內容時,每次更新都會在文件中的某個位置或整個範圍中進行。這些位置和範圍是透過「索引」指定,而索引代表包含文件區段中的偏移。片段是指包含結構或內容元素的主體、標頭、頁尾或註腳。區隔中的元素索引與該區段的開頭相關。

主體內容中的大多數元素都具有以零為基礎的 startIndexendIndex 屬性。這些值表示元素開始和結束的偏移量 (相對於元素封閉片段的開頭)。如要進一步瞭解如何排列批次 Docs API 呼叫的順序,請參閱「批次更新」。

索引是以 UTF-16 代碼單位計算,這表示代理組合會耗用兩個索引。舉例來說,「GRINNING FACE」表情符號 from 會以 \uD83D\uDE00 表示,並會耗用兩個索引。

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

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

存取元素

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

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

剖析內容對各種用途有幫助。例如,假設找到一份文件,列出應用程式找到的文件。這個應用程式可擷取文件的標題、修訂版本 ID 和起始頁碼,如下圖所示:

文件目錄的結構。
圖 6 文件目錄的結構。

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

資源繼承

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

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

段落格式可決定文件中的文字區塊的顯示方式,例如對齊、框線和縮排。套用的格式會覆寫從基礎 ParagraphStyle 沿用的預設格式。相反地,任何未設定的格式設定地圖項目都會沿用段落樣式。