WordAutomation/de
Dieser Artikel behandelt ausschließlich Windows.
Siehe auch: Multiplatform Programming Guide/de
│
Deutsch (de) │
Word als OleObjekt
Word lässt sich wie alle MS Office Produkte automatisieren. Im Gegensatz zu den übrigen MS Office Produkten ist es bei der Automatisierung sehr sehr langsam und reagiert sehr ungewohnt.
Wenn man als Automatisierungsobjekt nicht zwingend auf MS Word angewiesen ist, dann sollte man für die Automatisierung MS Excel nehmen.
Wenn Sie Umlaute verwenden, dann sollten Sien wissen, dass Word UTF16 codierte Strings verwendet.
Für die Oleautomation muss die Unit ComObj eingebunden werden.
Wenn Sie mit Umlauten usw. arbeiten dann brauchen Sie für das Stringcasting die Unit lclproc.
Beispiel:
unit
ComObj, lclproc;
Speicherplatz für Word und Worddokument reservieren
var
varWdApp: oleVariant; // Reserviert Speicher für die Programmsteuerung
varDokument: oleVariant; // Reserviert Speicher für die Steuerung des Worddokuments
Wordsteuerung
Word OleObjekt erstellen
begin
...
try
varWdApp := CreateOleObject('Word.Application'); // erstellt das Wordobjekt
except
WriteLn('MS Word kann nicht gestartet werden.'); // Fehlerbehandlung
end;
...
end;
Word Version ermitteln
begin
...
ShowMessage(varWdApp.Version);
...
end;
Word beenden und Speicher freigeben
begin
...
varWdApp.Quit;
varWdApp := Unassigned;
...
end;
Die Sichtbarkeit von Word steuern
Eine unsichtbare Anwendung verhindert während der Automatisierung das Flackern des Bildschirms.
begin
...
varWdApp.Visible := False; // macht Word unsichtbar
varWdApp.Visible := True; // macht Word sichtbar
...
end;
Word Screenupdating (Bildschirmaktualisierung)
begin
...
varWdApp.ScreenUpdating := False; // schaltet bei einem sichtbaren Word das Flackern des Bildschirms aus
// und erhöht die Verarbeitungsgeschwindigkeit.
varWdApp.ScreenUpdating := True; // schaltet die Bildschirmaktualisierung wieder ein.
...
end;
Dokument bearbeiten
Worddokument erstellen
begin
...
varDokument := varWdApp.Documents.Add; // fügt ein neues 'leeres' Worddokument hinzu
...
end;
Worddokument öffnen
Es gibt mehrere Möglichkeiten ein Worddokument zu öffnen.
Beispiel 1:
Ein Worddokument mit mehreren Parametern öffnen
Alle Parameter ausser Parameter 1 sind optional
- Parameter: Pfadname und Datename
- Parameter: False, wenn die Datei nicht in das aktuelle Wordformat konvertiert werden soll
- Parameter: True, wenn die Datei schreibgeschützt geöffnet werden soll
- Parameter: True, wenn der Name der Datei der Liste der zuletzt geöffneten Dateien hizugefügt werden soll
- Parameter: Das Kennwort (Passwort) zum öffnen der Vorlage
- Parameter:
- Parameter: Das Kennwort (Passwort) zum Speichern des Dokuments
- Parameter: Das Kennwort (Passwort) zum Speichern der Vorlage
- Parameter:
- Parameter: Das Dateikonvertierungsprogramm, das zum Öffnen des Dokuments verwendet werden soll. Der Standardwert ist wdOpenFormatAuto
begin
...
varDokument := varWdApp.Documents.Open(FileName, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam,
EmptyParam);
...
end;
Beispiel 2:
Ein Worddokument mit einem Umlaut usw. im Dateinamen öffnen
begin
...
varDokument := varWdApp.Documents.Open(UTF8ToUTF16('D:\Üben.doc')); // Öffnet ein Worddokument mit Umlauten usw. im Namen
...
end;
Beispiel 3:
begin
...
varDokument := varWdApp.Documents.Open(strPfad); // öffnet ein Worddokument mit Hilfe einer Variablen
// (Pfad: maximal 255 Zeichen, Alphanumerisch)
varDokument := varWdApp.Documents.Open('D:\Test.doc'); // öffnet ein Worddokument mit festem Pfad hinzu
...
end;
Worddokument aktivieren
begin
...
varDokument.Activate; //aktiviert das Worddokument
...
end;
Worddokument Text einfügen
begin
...
varWdApp.Selection.TypeText(Text := 'Neuer Text. ');
varWdApp.Selection.TypeText(Text := UTF8ToUTF16('Zusätzlicher Text')); // Benötigt die Unit lclproc für die korrekte
// Umwandlung der Umlaute
varWdApp.Selection.InsertAfter('Test'); // fügt im Worddokument nach der Cursorposition diesen Text ein
// die Cursorpsition befindet sich bei einem frisch geöffneten Worddokument
// immer am Anfang des Dokuments
...
end;
Worddokument speichern
Beispiel 1:
Ein Worddokument ohne Besonderheiten im Namen speichern.
begin
...
varDokument.SaveAs('D:\Test.doc'); // Speichert das Worddokument unter einem neuen Namen
varDokument.Save; // Speichert das Worddokument unter seinem aktuellen Namen
...
end;
Beispiel 2:
Ein Worddokment mit Umlaut im Namen speichern.
begin
...
varDokument.SaveAs(UTF8ToUTF16('D:\Üben.doc')); // Speichert das Worddokument (mit Umlauten usw. im Namen)
// unter einem neuen Namen ab
...
end;
Worddokument schliessen
begin
...
varDokument.Close; // Schliesst das Worddokument
...
end;
Worddokument Speicher freigeben
begin
...
varDokument := Unassigned; // Gibt den Speicher für die Programmsteuerung frei
...
end;
Absatz
Absatz ausrichten
begin
...
varWdApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphright; // Ausrichtung am rechten Dokumentrand
varWdApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphLeft; // Ausrichtung am linken Dokumentrand
varWdApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphCenter; // Ausrichtung in der Dokumentmitte
...
end;
Absatz (Zeilenumbruch) einfügen
begin
...
varWdApp.Selection.TypeParagraph; // fügt einen Zeilenumbruch (Absatz) ein
// Alternative
varWdApp.Selection.InsertAfter(String(#13)); // fügt einen Zeilenumbruch im Worddokument ein
varWdApp.Selection.InsertAfter(String(#10)); // fügt einen Zeilenumbruch im Worddokument ein
...
end;
Auszug aus den Wordkonstanten
unit uWdConst;
interface
const
// Klasse WdGoToItem
wdGoToBookmark = -1;
wdGoToComment = 6;
wdGoToEndnote = 5;
wdGoToEquation = 10;
wdGoToField = 7;
wdGoToFootnote = 4;
wdGoToGrammaticalError = 14;
wdGoToGraphic = 8;
wdGoToHeading = 11;
wdGoToLine = 3;
wdGoToObject = 9;
wdGoToPage = 1;
wdGoToPercent = 12;
wdGoToProofreadingError = 15;
wdGoToSection = 0;
wdGoToSpellingError = 13;
wdGoToTable = 2;
// Klasse wdParagraphAlignment
wdAlignParagraphCenter = 1;
wdAlignParagraphDistribute = 4;
wdAlignParagraphJustify = 3;
wdAlignParagraphJustifyHi = 7;
wdAlignParagraphJustifyLow = 8;
wdAlignParagraphJustifyMed = 5;
wdAlignParagraphLeft = 0;
wdAlignParagraphRight = 2;
wdAlignParagraphThaiJustify = 9;
//Klasse wdRowAlignment
wdAlignRowCenter = 1;
wdAlignRowLeft = 0;
wdAlignRowRight = 2;
// Klasse wdOpenFormat
wdOpenFormatAllWord = 6;
wdOpenFormatAuto = 0;
wdOpenFormatDocument = 1;
wdOpenFormatEncodedText = 5;
wdOpenFormatRTF = 3;
wdOpenFormatTemplate = 2;
wdOpenFormatText = 4;
wdOpenFormatUnicodeText = 5;
wdOpenFormatWebPages = 7;
wdOpenFormatXML = 8;
implementation
end.
--Olaf 16:52, 25 September 2012 (UTC)