Arbeiten mit Text

Arbeiten mit Text

Text in einem Word-Dokument ist in Run-Knoten (zusammenhängende Zeichen, die dieselbe Schriftformatierung teilen) gruppiert, die in Paragraph-Knoten enthalten sind. Aspose.Words FOSS für .NET stellt beide direkt bereit, zusammen mit Font für Zeichenformatierung, ParagraphFormat für Absatzformatierung und Range zum Lesen oder Ersetzen von Text in beliebigem Teil des Baums. Dieser Leitfaden behandelt Runs und Schriftarten, Absatzformatierung, das Lesen und Ersetzen von Text, Kommentare und Listenformatierung auf Absatzebene.


Runs und Zeichenformatierung

Ein Run stellt einen Textabschnitt dar, der eine einheitliche Formatierung aufweist; seine Text-Eigenschaft enthält den Klartextinhalt und seine Font-Eigenschaft (ein Font-Objekt) enthält die Zeichenformatierung — Name, Size, Bold, Italic, Underline, Color, HighlightColor, Subscript/Superscript, StrikeThrough und viele weitere. Font.ClearFormatting() setzt die Schrift eines Runs auf die Vorgaben zurück. Die Runs eines Absatzes sind über seine Runs-Eigenschaft verfügbar, ein RunCollection.


Absätze und Absatzformatierung

Paragraph ist ein zusammengesetzter Knoten, der die Runs (und anderen Inline-Inhalt) eines Absatzes enthält; die Absätze eines Dokuments oder Körpers werden als ParagraphCollection (Body.Paragraphs) bereitgestellt. Paragraph.ParagraphFormat (ein ParagraphFormat-Objekt) steuert das Layout auf Absatzebene — Alignment, Einzüge (LeftIndent, RightIndent, FirstLineIndent), Abstände (SpaceBefore, SpaceAfter, LineSpacing, LineSpacingRule) und das Seitenumbruchverhalten (KeepTogether, KeepWithNext, PageBreakBefore, WidowControl). ParagraphFormat.ClearFormatting() setzt diese auf die Vorgaben zurück, und Paragraph.JoinRunsWithSameFormatting() führt benachbarte Runs zusammen, die identische Formatierung aufweisen.


Lesen und Ersetzen von Text mit Range

Jeder Knoten, der Inhalt enthält — ein Document, Section, Paragraph oder Run — stellt ein Range bereit. Range.Text gibt den Nur-Text von allem innerhalb dieses Bereichs zurück, und Range.Replace(pattern, replacement) führt ein Suchen-Und-Ersetzen nur in diesem Bereich durch, sodass Sie zum Beispiel Text in einem Absatz ersetzen können, ohne den Rest des Dokuments zu verändern. Range.Delete() entfernt den Inhalt des Bereichs vollständig.


Comments

Ein Comment-Knoten verankert einen Kommentar an einer Stelle im Text; erstellen Sie einen mit new Comment(doc, author, initial, dateTime) und setzen Sie dessen Haupttext mit SetText(text), dann fügen Sie ihn wie jeden anderen Knoten in das Dokument ein. Comment.AddReply(author, initial, dateTime, text) fügt eine Thread-Antwort hinzu, und RemoveReply(reply) / RemoveAllReplies() entfernen sie. Die Kommentare eines Dokuments werden in einem CommentCollection gesammelt.


Listformatierung auf Absatzebene

Paragraph.ListFormat (ein ListFormat-Objekt) gibt Auskunft und steuert, ob ein Absatz Teil einer Liste ist: IsListItem und ListLevelNumber melden den aktuellen Zustand, ApplyBulletDefault() und ApplyNumberDefault() verwandeln einen Absatz in ein Standard-Aufzählungs- bzw. Nummerierungslisten-Element, ListIndent() / ListOutdent() ändern dessen Listeneinrückungsstufe, und RemoveNumbers() macht ihn wieder zu einem regulären Absatz.


Tipps und bewährte Vorgehensweisen

  • Legen Sie die Schriftarteigenschaften für DocumentBuilder.Font fest, bevor Sie Text mit dem Builder schreiben, anstatt zuerst Text zu schreiben und anschließend einzelne Run-Objekte neu zu formatieren.
  • Begrenzen Sie Range.Replace auf den kleinsten Bereich, der das tatsächlich zu ändernde Element abdeckt — rufen Sie es für den Bereich eines Paragraph oder Section auf, anstatt das gesamte Dokument zu verwenden, wenn die Änderung nicht dokumentweit gelten soll.
  • Rufen Sie Paragraph.JoinRunsWithSameFormatting() nach einer Reihe programmgesteuerter Änderungen auf, um eine unnötig fragmentierte Laufstruktur zu vermeiden.
  • Verwenden Sie ListFormat.ApplyBulletDefault() / ApplyNumberDefault() für eine schnelle Standardliste, anstatt Listendefinitionen manuell zu erstellen, wenn die integrierten Vorgaben ausreichen.
  • Lesen Sie die Comment.AddReply-Ergebnisse als Comment-Knoten — Antworten sind vollständige Kommentarobjekte, keine einfachen Zeichenketten.

Häufige Probleme

ProblemUrsacheLösung
Das Formatieren eines Runs Font ändert den angrenzenden Text nicht visuellDer angrenzende Text befindet sich in einem anderen Run mit einer eigenen Font-InstanzSuchen und formatieren Sie jedes betroffene Run, oder setzen Sie die Formatierung über DocumentBuilder.Font vor dem Schreiben
Range.Replace ändert Text außerhalb des beabsichtigten BereichsReplace wurde auf Document.Range aufgerufen, anstatt auf den Bereich eines kleineren KnotensRufen Sie Replace für das spezifische Paragraph, Section oder das Range eines anderen Knotens auf
Ein Absatz sieht aus wie ein Listeneintrag, aber IsListItem ist falschDer Aufzählungszeichen/Nummer ist manueller Text, nicht echte ListformatierungWenden Sie echte Listformatierung mit ListFormat.ApplyBulletDefault() oder ApplyNumberDefault() anstelle von getippten Zeichen an
Das Dokument enthält deutlich mehr Run-Knoten als erwartetWiederholte kleine Änderungen teilen Läufe, ohne sie wieder zusammenzufügenRufen Sie Paragraph.JoinRunsWithSameFormatting() nach Bearbeitungspaketen auf

FAQ

Was ist der Unterschied zwischen Run und Paragraph?

Ein Run ist ein Textabschnitt, der ein Satz von Zeichenformatierungen (Font) gemeinsam nutzt; ein Paragraph ist der zusammengesetzte Knoten, der einen oder mehrere Runs (und andere Inline-Inhalte) sowie Absatzformatierungen (ParagraphFormat) enthält.

Wie lese ich den gesamten Text in einem Dokument oder Abschnitt?

Lese die Text-Eigenschaft des Range dieses Knotens — zum Beispiel document.Range.Text oder section.Range.Text.

Wie finde und ersetze ich Text in nur einem Absatz?

Rufe Replace(pattern, replacement) auf dem Range dieses Paragraph auf, anstatt auf Document.Range.

Wie füge ich einem Dokument einen Kommentar hinzu?

Erstelle es mit new Comment(doc, author, initial, dateTime), setze seinen Text mit SetText(text) und füge es in den Baum ein; antworte darauf mit Comment.AddReply(author, initial, dateTime, text).

Wie verwandle ich einen Absatz in ein Aufzählungslisten-Element?

Rufe ApplyBulletDefault() auf dem ListFormat dieses Absatzes auf; verwende stattdessen ApplyNumberDefault() für eine nummerierte Liste.


API Reference Zusammenfassung

Klasse/MethodeBeschreibung
RunEin Textabschnitt, der ein Satz von Zeichenformatierungen gemeinsam nutzt.
FontZeichenbezogene Formatierung — Name, Größe, Fett, Kursiv, Farbe und mehr.
ParagraphZusammengesetzter Knoten, der die Runs und Formatierungen eines Absatzes enthält.
ParagraphFormatAbsatzbezogene Formatierung — Ausrichtung, Einzüge, Abstand, Seitennummerierung.
ParagraphCollectionTypisierte Sammlung von Paragraph-Knoten, z.B. Body.Paragraphs.
RangeEin zusammenhängender Bereich des Dokuments; unterstützt Text, Replace und Delete.
CommentEin Threaded-Kommentar, der an einer Stelle im Text verankert ist.
CommentCollectionDie Sammlung von Kommentaren des Dokuments.
ListFormatSteuert, ob und wie ein Absatz an einer Liste teilnimmt.

Siehe auch

 Deutsch