Freitag, 21. September 2012

Word Tutorial

In diesem Post möchte ich zeigen, wie man C# und Microsoft Office Word verbindet. Ich werde zeigen, wie man mit C# neue Word Dokumente erstellt, Texte einfügt, Einstellungen vornimmt, Dokumente öffnet, speichert und anzeigt.
Zuerst müssen wir die entsprechende Komponente in unser Projekt einbinden, dies geschieht über Projekt - Verweis hinzufügen - COM - Microsoft Word xx Object Library. xx steht hierbei für die jeweilige Versionsnummer.
Dann benutzen wir den Code using Word = Microsoft.Office.Interop.Word, um auf das Word Objekt über das Wort Word zugreifen zu können.

Word Instanz erstellen und anzeigen:
Word.Application WordApp = new Word.Application();
WordApp.Visible = true;
Hiermit wird eine neue Instanz eines Word Objektes angelegt. Durch Aktivieren der Sichtbarkeit, wird dieses angezeigt. Da noch keine Dokumente geladen worden, wird einfach das graue Word Fenster angezeigt.

Neues Word Dokument erstellen:
Die Eigenschaft Documents der Instanz beinhaltet geöffnete Dokumente, zu dieser Aufzählung können wir nun Dokumente, z.B. durch Öffnen oder Erstellen, hinzufügen. Um ein neues Dokument zu erstellen, ist folgender Befehl nötig:
Word.Document NewDocument = WordApp.Documents.Add();

Dokument schließen
Hierfür ist die Funktion Close() zuständig, die von dem entsprechenden Dokument aufgerufen wird, also mit obigem Beispiel z.B.:
NewDocument.Close();

Bestehendes Word Dokument öffnen:
Object oMissing = System.Reflection.Missing.Value;
Word.Document ExistingDocument = WordApp.Documents.Open("Dateiname", oMissing, true, oMissing, "Passwort");
Alle Argumente außer dem ersten sind optional. Das 3. gibt an (true wenn ja), ob das Dokument schreibgeschützt geöffnet werden soll. Das 5. gibt ein eventuelles Passwort an.
Das Argument oMissing mit dem Wert System.Reflection.Missing.Value ist sehr praktisch, es liefert immer den Standardwert des aktuellen Arguments zurück und kann so einfach bei ungebrauchten Argumenten als Füller genommen werden.

Text einfügen
WordApp.Selection.TypeText("Hallo Welt");
Dieser Code tippt den angegeben Text in das jeweils oberste Dokument der Documents Aufzählung.

Formatierungen vornehmen Ebenfalls über die Selection Eigenschaft können Formatierungen vorgenommen werden. Werden diese vor einem TypeText Befehl durchgeführt, greifen sie beim geschriebenen Text. Es stehen alle bekannten Formatierungsoptionen zur Verfügung, z.B.:
WordApp.Selection.Font.Size = 20;
Dokument speichern Ein Dokument kann entweder über die parameterlose Funktion Save() oder über SaveAs2() gespeichert werden. Letztere erwartet den Speicherpfad.

Word Instanz beenden
WordApp.Quit();

Kommentare:

  1. Hey Oliver,

    weißt du vielleicht, wo man am besten eine Einführung in die Win32API-Methoden finden kann?
    am besten wäre ein Verzeichnis, in dem man stöbern könnte und wo die Methoden (mit Beschreibung ihrer "Auswirkungen" und der nötigen Parameter) versehen sind. Ich habe nämlich das Problem, dass mir diese Bibliothek so riesig und nicht durchschaubar vorkommt, und die Methodennamen erklären sich ja meistens auch nicht so ganz von selbst für einen Laien.. :(

    Wäre cool, weil ich zurzeit auf der Suche nach weiteren Möglichkeiten bin, mit eigenen Programmen meine Windows-Oberfläche zu beeinflussen/anzupassen (natürlich nicht in die tiefen Systembasics - ich will meinen Rechner ja nicht aus Versehen zerschießen ;D) Wobei mich schon interessieren würde, wie man z.B. Windows-Fenster vom Aussehen beeinflussen könnte,so ähnlich wie Window Blinds es ja auch macht 8) Wobei das wahrscheinlich schon wieder seeeehr tief ins System eingreift..

    Vielen Dank im Voraus!
    Julian

    AntwortenLöschen
  2. Hey Julian,

    ja da kenne ich in der Tat seine sehr gute Bibliothek, und zwar http://www.pinvoke.net/, da schlage ich auch immer nach.

    Viel Spaß damit!
    Oliver

    AntwortenLöschen
  3. Hey Oliver !
    Ich bin gerade am rumprobieren um genau das zu tun was du hier in deinem Tutorial vorstellst. Ich arbeite mit Visual Studio Express 2013.
    Sobald ich using Word = Microsoft.Office.Interop.Word in meinen Code einfüge Erscheint der Fehler, dass Microsoft.Office.Interop ein Namespace ist und nicht als Ausdruck verwendet werden kann. versuche ich es mit .Application dazu meckert er es muss Szstem.IDisposable implementiert sein. Hast du eine Idee wie ich das begeben kann ?

    Gruß Julia

    AntwortenLöschen
  4. Hey, ich nochmal.
    Also mein oben beschriebenes Problem hat sich erledigt.
    Habe allerdings ein neues Problem, ich kann auf keine Funktionen von Application oder Document zugreifen. Sobald ich ...Application. irgendwas eingebe hat er ein Problem damit.

    Gruß Julia

    AntwortenLöschen
  5. Genau das ist bei mir auch.
    Error CS0576 Namespace '' contains a definition conflicting with alias 'Word'. Das ist immer meine Fehlermeldung.

    AntwortenLöschen