Wie man mit Dokumenten in .NET arbeitet

Wie man mit Dokumenten in .NET arbeitet

Dieser Leitfaden zeigt, wie man mit dem Document-Objektmodell in Aspose.Words FOSS für .NET arbeitet: ein leeres Dokument erstellen, ein vorhandenes sicher laden, seine Abschnitt-/Body-Struktur durchlaufen, Dokumente kombinieren und eine Bearbeitungseinschränkung anwenden. Aspose.Words FOSS für .NET ist über NuGet oder durch Kompilieren aus dem Quellcode verfügbar.

Schritt-für-Schritt-Anleitung

Schritt 1: Bibliothek holen

Klone das Repository und baue es Aspose.Words.sln in Release-Konfiguration, dann füge eine Projektreferenz zu Aspose.Words.csproj aus deinem eigenen .NET-Projekt. Vollständige Klon- und Build-Befehle findest du im Installationshandbuch. Sobald referenziert, füge hinzu using Aspose.Words; am Anfang jeder Datei, die mit Dokumenten arbeitet.


Schritt 2: Dokument erstellen oder laden

Rufen Sie new Document() für ein leeres Dokument auf oder übergeben Sie einen Dateipfad oder Stream an den Document(fileName)/Document(stream)-Konstruktor, um ein bestehendes zu öffnen. Eine Überladung, die ein LoadOptions-Argument akzeptiert, ermöglicht es Ihnen, ein Passwort für eine verschlüsselte Datei anzugeben. Bevor Sie eine Datei laden, deren Format Sie noch nicht vertrauen, rufen Sie FileFormatUtil.DetectFileFormat(fileName) auf – sie gibt ein FileFormatInfo zurück, das das erkannte LoadFormat meldet und ob die Datei IsEncrypted, HasDigitalSignature oder HasMacros ist, sodass Sie unerwartete Eingaben ablehnen können, bevor Document versucht, sie zu parsen.


Schritt 3: Inhalte erstellen mit DocumentBuilder

DocumentBuilder umschließt ein Document mit einem Cursor, den Sie durch den Baum bewegen, während Sie Inhalt einfügen. Write(text) und Writeln(text) fügen Text am Cursor ein, und InsertParagraph() startet einen neuen Absatz. Die Formatierung, die auf den Eigenschaften Font, ParagraphFormat, ListFormat und PageSetup des Builders gesetzt wird, gilt für alles, was Sie als Nächstes schreiben. Positionieren Sie den Cursor neu mit MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName) oder MoveToParagraph(paragraphIndex, characterIndex) und lesen Sie CurrentNode / CurrentParagraph / CurrentSection, um zu bestätigen, wo der Builder positioniert ist.


Schritt 4: Abschnitts- und Körperstruktur prüfen

Ein Document stellt ein SectionCollection über Document.Sections (plus FirstSection / LastSection) zur Verfügung. Jeder Section hat genau ein Body, dessen Hauptinhalt über Body.Paragraphs (ein ParagraphCollection) und Body.Tables erreichbar ist. Um Text zu lesen oder zu durchsuchen, ohne Knoten manuell zu durchlaufen, verwenden Sie das Range, das auf Document, Section, Paragraph und anderen Knoten verfügbar ist – Range.Text gibt den Klartext zurück und Range.Replace(pattern, replacement) führt eine find-and-replace-Aktion nur für diesen Bereich aus.


Schritt 5: Zwei Dokumente kombinieren

Um ein gesamtes Dokument zu kopieren, rufen Sie Document.Clone() auf. Um spezifischen Inhalt von einer Document-Instanz in eine andere zu übernehmen, rufen Sie ImportNode(srcNode, isImportChildren) im Ziel-Dokument auf, oder rufen Sie Document.AppendDocument(srcDoc, importFormatMode) auf, um jeden Abschnitt eines Quelldokuments an das Ende des aktuellen anzuhängen. DocumentBuilder.InsertDocument(srcDoc, importFormatMode) macht dasselbe, fügt jedoch am Cursor des Builders ein statt am Ende. In allen drei Fällen wählen Sie den ImportFormatMode-Wert — KeepSourceFormatting, UseDestinationStyles oder KeepDifferentStyles — bewusst, da er bestimmt, welche Dokumentstile bei einem Konflikt Vorrang haben.


Schritt 6: Eine Bearbeitungseinschränkung anwenden

Rufen Sie Document.Protect(type, password) mit einem ProtectionType-Wert — ReadOnly, AllowOnlyComments, AllowOnlyRevisions oder AllowOnlyFormFields — auf, um einzuschränken, welche Änderungen Word für das Dokument akzeptiert. Unprotect() (mit oder ohne das passende Passwort) entfernt die Einschränkung. Dies wirkt sich nur auf die Bearbeitung innerhalb von Word aus; es verschlüsselt die gespeicherte Datei nicht. Um ein Passwort nur zum Öffnen der Datei zu verlangen, setzen Sie OoxmlSaveOptions.Password beim Speichern.

Häufige Probleme und Lösungen

Document(fileName) wirft eine Ausnahme für eine Datei, die sich in Word problemlos öffnen lässt. Das Dateiformat wird von den Ladern dieser Ausgabe nicht unterstützt. Rufen Sie FileFormatUtil.DetectFileFormat(fileName) zuerst prüfen Sie das Zurückgegebene LoadFormat bevor Sie versuchen zu laden.

Der zwischen Dokumenten kopierte Inhalt übernimmt die falschen Schriftarten oder Stile. Der ImportFormatMode übergeben an AppendDocument or InsertDocument entspricht nicht dem, was Sie erwartet haben. Übergeben Sie KeepSourceFormatting or UseDestinationStyles explizit, anstatt sich auf einen Standard zu verlassen.

Unprotect() scheint keine Wirkung zu haben. Entweder war das Dokument nicht mit einem Passwort geschützt (Aufruf Unprotect() ohne Argumente), oder das bereitgestellte Passwort stimmt nicht mit dem überein, das Protect() aufgerufen wurde.

Formatierung, die über DocumentBuilder nicht dort erscheint, wo sie erwartet wird. Builder-Level-Formatierung (Font, ParagraphFormat) gilt nur für Inhalt, der after wenn sie gesetzt ist. Bewegen Sie den Cursor und setzen Sie die Formatierung, bevor Sie aufrufen Write/Writeln, nicht danach.

Häufig gestellte Fragen

Wie erstelle ich ein neues, leeres Word-Dokument?

Rufen Sie new Document() auf. Umwickeln Sie es mit einem DocumentBuilder, um sofort mit dem Einfügen von Inhalten zu beginnen.

Was ist der Unterschied zwischen Document.Clone() und ImportNode?

Clone() kopiert ein komplettes Dokument in eine neue Document-Instanz. ImportNode(srcNode, isImportChildren) holt einen einzelnen Knoten – und optional dessen Kinder – vom Baum eines Dokuments in ein anderes, was Sie verwenden, um spezifische Inhalte statt ganzer Dokumente zu kombinieren.

Wie kann ich das Dateiformat sicher prüfen, bevor ich es lade?

Rufen Sie FileFormatUtil.DetectFileFormat(fileName) (oder die Stream-Überladung) auf und prüfen Sie die LoadFormat, IsEncrypted, HasDigitalSignature und HasMacros-Eigenschaften des zurückgegebenen FileFormatInfo, bevor Sie die Datei an Document übergeben.

Wie lese ich nur die Absätze im Dokumentkörper?

Verwenden Sie die Body.Paragraphs-Sammlung auf der Body des Abschnitts oder Body.GetChildNodes(nodeType, isDeep) für andere Knotentypen.

Verschlüsselt Document.Protect die gespeicherte Datei?

Nein — es ist eine Bearbeitungseinschränkung, die Word beim Öffnen der Datei durchsetzt. Um ein Passwort zum Öffnen der Datei selbst zu verlangen, setzen Sie OoxmlSaveOptions.Password beim Aufruf von Document.Save.

Siehe auch

 Deutsch