Struktur eines Google Docs-Dokuments

Um die Google Docs API effektiv nutzen zu können, müssen Sie die Architektur eines Google Docs-Dokuments, die Elemente, aus denen ein Dokument besteht, und die Beziehung zwischen diesen verstehen. Auf dieser Seite finden Sie eine detaillierte Übersicht zu den folgenden Themen:

  • Ein konzeptionelles Modell der Dokumentelemente
  • Darstellung dieser Elemente in der Docs API
  • Die Stileigenschaften der Elemente

Elemente der obersten Ebene

Das äußerste Containerelement in Google Docs ist ein Dokument. Diese Einheit kann in Google Drive gespeichert, für andere Nutzer freigegeben und mit Text und Bildern aktualisiert werden.

Zu den Elementen der obersten Ebene einer documents-Ressource gehören die Tabs, SuggestionsViewMode und andere Attribute:

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

Tabs

Ein einzelnes Dokument kann mehrere Tabs mit unterschiedlichen Inhalten auf Textebene enthalten. Die tabs-Eigenschaft des Dokuments ist eine Folge von Tab-Objekten. Ein Tab besteht aus den folgenden Feldern:

  • TabProperties: Enthält die Attribute eines Tabs, z. B. ID, Titel und Index.
  • childTabs: Macht alle untergeordneten Tabs eines Tabs sichtbar, also Tabs, die direkt darunter verschachtelt sind.
  • DocumentTab: Representiert den Textinhalt eines Tabs.
Struktur der Tabs eines Dokuments.
Abbildung 1. Struktur der Tabs eines Dokuments.

In den folgenden Abschnitten erhalten Sie einen kurzen Überblick über die Tab-Hierarchie des Dokuments. Die Tab-JSON-Darstellung enthält auch ausführlichere Informationen. Weitere Informationen zur Tab-Funktion finden Sie unter Mit Tabs arbeiten.

Wenn Sie globale Dokument-Tab-Features außerhalb des Body-Inhalts bearbeiten möchten, ist es fast immer besser, eine oder mehrere Dokumentvorlagen zu verwenden, die Sie als Grundlage zum programmatischen Generieren neuer Dokumente verwenden können. Weitere Informationen finden Sie unter Text in ein Dokument einfügen.

Textinhalt

Body enthält in der Regel den vollständigen Inhalt des Tabs eines Dokuments. Die meisten Elemente, die Sie programmatisch verwenden können oder möchten, sind Elemente innerhalb der Body-Inhalte:

Struktur des Textinhalts.
Abbildung 2: Struktur des Textinhalts

Strukturelement

Mit einer StructuralElement werden Inhalte beschrieben, die dem Dokument Struktur verleihen. Der Body-Inhalt ist eine Sequenz von StructuralElement-Objekten. Mit einem Inhaltselement wird jedes StructuralElement-Objekt personalisiert, wie im folgenden Diagramm dargestellt:

Strukturelle Elemente
Abbildung 3: Strukturelle Elemente

Strukturelemente und ihre Inhaltsobjekte enthalten alle visuellen Komponenten innerhalb des Dokuments. Dazu gehören Text, Inline-Bilder und Formatierung.

Absatzstruktur

Ein Paragraph ist ein StructuralElement, das einen Absatz darstellt. Es umfasst eine Reihe von Inhalten, die mit einem Zeilenumbruchzeichen abgeschlossen sind. Er besteht aus den folgenden Objekten:

  • ParagraphElement: Beschreibt den Inhalt eines Absatzes.
  • ParagraphStyle: Ein optionales Element, mit dem Stileigenschaften für den Absatz explizit festgelegt werden.
  • Bullet: Wenn der Absatz Teil einer Liste ist, ein optionales Element, das die Aufzählungszeichenspezifikation enthält.

Die ParagraphElement funktioniert in etwa wie eine StructuralElement. Bei einer Reihe von Inhaltselementtypen (z. B. ColumnBreak und Equation) wird der eigene ParagraphElement personalisiert, wie im folgenden Diagramm dargestellt:

Struktur der Absatzelemente.
Abbildung 4: Struktur der Absatzelemente.

Ein Beispiel für eine vollständige Dokumentstruktur finden Sie im Dokumentbeispiel im JSON-Format. In der Ausgabe sehen Sie viele wichtige Struktur- und Inhaltselemente sowie die Verwendung der Start- und Endindexe, wie im folgenden Abschnitt beschrieben.

Textzeilen

Ein TextRun ist ein ParagraphElement, der einen zusammenhängenden Textstring mit demselben Textstil darstellt. Ein Absatz kann mehrere Textabläufe enthalten, aber Textabläufe überschreiten nie Absatzgrenzen. Inhalte werden nach einem Zeilenumbruchzeichen aufgeteilt, um separate Textläufe zu bilden. Stellen Sie sich ein winziges Dokument wie das folgende vor:

Kleines Dokument mit Absätzen und Aufzählungsliste.
Abbildung 5: Ein kleines Dokument.

Das folgende Diagramm zeigt, wie Sie die Abfolge der Absätze im vorherigen Dokument mit jeweils eigenen TextRun- und optionalen Bullet-Einstellungen visualisieren können.

Struktur eines Textlaufs.
Abbildung 6: Struktur eines Textlaufs.

AutoText

AutoText ist ein ParagraphElement, das eine Stelle im Text darstellt, die dynamisch durch Inhalte ersetzt wird, die sich im Laufe der Zeit ändern können. In Google Docs wird diese Funktion für Seitennummern verwendet.

Start- und Endindexe

Wenn Sie den Inhalt des Tabs eines Dokuments aktualisieren, wird jede Aktualisierung an einer Stelle oder in einem Bereich innerhalb des Dokuments vorgenommen. Diese Positionen und Bereiche werden mithilfe von Indexen angegeben, die einen Offset innerhalb eines enthaltenden Dokument-Segments darstellen. Ein Segment ist der Textkörper, die Kopf-, Fußzeile oder Fußnote, die Struktur- oder Inhaltselemente enthalten. Die Indizes der Elemente innerhalb eines Segments beziehen sich auf den Anfang dieses Segments.

Die meisten Elemente im Textkörper haben die Attribute startIndex und endIndex, die von null ausgehen. Sie geben den Versatz des Anfangs und des Endes eines Elements relativ zum Anfang des umschließenden Segments an. Weitere Informationen zum Anfordern von Batch-Docs API-Aufrufen finden Sie unter Batch-Aktualisierungen.

Indexe werden in UTF-16-Codeeinheiten gemessen. Das bedeutet, dass Ersatzzeichenpaare zwei Indexe belegen. Das Emoji „LÄCHELNDES GESICHT“, 😄, wird beispielsweise als \uD83D\uDE00 dargestellt und belegt zwei Indexe.

Für Elemente innerhalb eines Dokumenttexts stellen Indexe den Versatz vom Anfang des Textinhalts, dem Stammelement, dar.

Die Typen „Personalisierung“ für strukturelle Elemente – SectionBreak, TableOfContents, Table und Paragraph – haben diese Indexe nicht, da sie in einem umschließenden StructuralElement enthalten sind, das diese Felder hat. Das gilt auch für die Personalisierungstypen in einer ParagraphElement, z. B. TextRun, AutoText und PageBreak.

Auf Elemente zugreifen

Viele Elemente können mit der Methode documents.batchUpdate geändert werden. Mit InsertTextRequest können Sie beispielsweise den Inhalt eines beliebigen Elements mit Text ändern. Mit UpdateTextStyleRequest können Sie einen Textbereich formatieren, der in einem oder mehreren Elementen enthalten ist.

Wenn Sie Elemente des Dokuments lesen möchten, verwenden Sie die Methode documents.get, um einen JSON-Dump des gesamten Dokuments abzurufen. Sie können dann die resultierende JSON-Datei parsen, um die Werte der einzelnen Elemente zu ermitteln. Weitere Informationen finden Sie unter Inhalt des Dokuments als JSON ausgeben.

Das Parsen von Inhalten kann für verschiedene Anwendungsfälle von Vorteil sein. Nehmen wir als Beispiel eine Anwendung zum Katalogisieren von Dokumenten, die gefundene Dokumente auflistet. Diese Anwendung kann den Titel, die Überarbeitungs-ID und die Startseite der Seitenzahl der Tabs eines Dokuments extrahieren, wie im folgenden Diagramm dargestellt:

Struktur eines Dokumentenkatalogs.
Abbildung 7: Struktur eines Dokumentenkatalogs.

Da es keine Methoden zum expliziten Lesen dieser Einstellungen gibt, muss Ihre App das gesamte Dokument abrufen und dann das JSON parsen, um diese Werte zu extrahieren.

Übernahme für Properties

Ein StructuralElement kann Eigenschaften von seinen übergeordneten Objekten übernehmen. Die Eigenschaften eines Objekts, einschließlich derjenigen, die es definiert und der übernommenen, bestimmen sein endgültiges visuelles Erscheinungsbild.

Mit der Formatierung von Textzeichen wird festgelegt, wie Text in einem Dokument dargestellt wird, z. B. fett, kursiv oder unterstrichen. Die von Ihnen angewendete Formatierung überschreibt die Standardformatierung, die vom TextStyle des zugrunde liegenden Absatzes übernommen wird. Umgekehrt werden alle Zeichen, deren Formatierung Sie nicht festlegen, weiterhin von den Stilen des Absatzes übernommen.

Die Absatzformatierung bestimmt, wie Textblöcke in einem Dokument gerendert werden, z. B. Ausrichtung, Ränder und Einrückung. Die von Ihnen angewendete Formatierung überschreibt die Standardformatierung, die von der zugrunde liegenden ParagraphStyle übernommen wurde. Umgekehrt werden alle Formatierungsfunktionen, die Sie nicht festlegen, weiterhin vom Absatzstil übernommen.