WordAutomation/de
Zurück zur Office Automation.\
=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 usw. verwenden, dann sollten Sie 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;==Sprache der Wordinstallation ermittlen==
begin
...
if varWdApp.System.Country <> wdGermany then ... // prüft, ob die Wordinstallation nicht Deutsch ist.
...
end;=Text des Dokuments bearbeiten=
Neues Worddokument erstellen
begin
...
varDokument := varWdApp.Documents.Add; // fügt ein neues 'leeres' Worddokument hinzu
...
end;==Vorhandenes Worddokument öffnen== Es gibt mehrere Möglichkeiten ein Worddokument zu öffnen.\
Beispiel 1:
Ein Worddokument mit mehreren Parametern öffnen
Alle Parameter außer 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;==Text Cursor setzen==
begin
...
varWdApp.Selection.EndKey(wdStory); // Cursor bewegt sich zum Ende des Dokumentes
varWdApp.Selection.HomeKey(wdStory); // Cursor bewegt sich zum Anfang des Dokumentes
varWdApp.Selection.MoveRight(wdWord); // Cursor am Anfang des nächsten Wortes
varWdApp.Selection.MoveLeft(wdCharacter); // Cursor wird um ein Zeichen nach Links versetzt
varWdApp.Selection.Delete(wdCharacter); // Löscht ein Zeichen rechts vom Cursor
varWdApp.Selection.MoveDown(wdParagraph); // Cursor bewegt sich zum Anfang des nächsten Abschnitts
...
end;==Text in ein Worddokument einfügen==
begin
...
varWdApp.Selection.TypeText(UTF8Decode('Neuer Text'));
varWdApp.Selection.TypeText(UTF8Decode('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;Beispiel 3:
Ein Worddokument in einem anderen Datei-Format speichern.
const
// Möglichkeiten wären u.a.
// https://docs.microsoft.com/de-de/office/vba/api/word.wdsaveformat
wdFormatDocument97 = 0; // .doc format
wdFormatRTF = 6;
wdFormatHTML = 8;
wdFormatXML = 11;
wdFormatDocumentDefault = 16; // .docx format
wdFormatPDF = 17;
wdFormatOpenDocumentText = 23;
var
FileFormat: OleVariant; // Wichtig: das muss als OleVariant deklariert sein!
begin
FileFormat := wdFormatRTF;
ADocument.SaveAs(FileName, FileFormat);
...Worddokument schliessen und Speicher freigeben
begin
...
varDokument.Close; // Schliesst das Worddokument
varDokument := Unassigned; // Gibt den Speicher für die Programmsteuerung frei
...
end;==Worddokument Eigenschaften festlegen== Alle Eigenschaften des Worddokumentes können über ihren englischen Namen angesprochen werden.\
begin
...
varDokument.BuiltInDocumentProperties['Title'].Value := 'Testdokument'; // fügt den Dokumententitel ein
varDokument.BuiltInDocumentProperties['Subject'].Value := 'Testdokumente'; // fügt das Thema ein
varDokument.BuiltInDocumentProperties['Author'].Value := 'Testuser'; // fügt den Ersteller ein
varDokument.BuiltInDocumentProperties['Manager'].Value := 'Testmanager'; // fügt den verantwortlichen Manager ein
varDokument.BuiltInDocumentProperties['Company'].Value := 'Testfirma'; // fügt die Firma ein
varDokument.BuiltInDocumentProperties['Category'].Value := 'Automatisationsbeispiele'; // fügt die Kategorie ein
varDokument.BuiltInDocumentProperties['Comments'].Value := 'Erstes Muster'; // fügt einen Kommentar ein
...
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;==Text formatieren== Der Text wird an der Cursorposition formatiert.
begin
...
varWdApp.Selection.Font.Name := 'Times New Roman'; // Schriftart
varWdApp.Selection.Font.Size := 12; // Schriftgrösse
varWdApp.Selection.Font.Bold := True; // Fettschrift
varWdApp.Selection.Font.Italic := True; // Kursivschrift
varWdApp.Selection.Font.Name := 'Arial'; // Schriftart
varWdApp.Selection.Font.Size := 11; // Schriftgrösse
varWdApp.Selection.Font.Bold := False; // keine Fettschrift
varWdApp.Selection.Font.Italic := False; // keine Kursivschrift
...
end;==Bookmarks==
===Speicher für die Bookmarksteuerung reservieren===
var
varBookmark: oleVariant; // Reserviert Speicher für die Steuerung der Bookmark===Variable initialisieren===
begin
...
// Fügt an der Stelle einer Bookmark (Textmarke / Markierung) einen Text ein
varBookmark := varDokument.Bookmarks.Item(2); // Auswahl der zu ersetzenden Bookmark (Markierung) über den Index
// in diesem Fall ist es die erste Bookmark
// Alternative
varBookmark := varDokument.Bookmarks.Item('Test2'); // Auswahl der zu ersetzenden Bookmark (Markierung) über ihren Namen
...
end;===An die Anfangsposition der Bookmark schreiben===
begin
...
varBookmark.Range.Text := UTF8ToUTF16('Testeintrag für die Bookmark'); // damit wird an der Position der
// Bookmark der Text eingefügt.
...
end;===Bookmark löschen===
begin
...
// Löscht, die ausgewählte Bookmark und nicht den eingefügten Text
varDokument.Bookmarks.Item(1).Delete; // Löscht die Bookmark über einen Index
// Alternative
varDokument.Bookmarks.Item('Test1').Delete; // Löscht die Bookmark über ihren Namen
...
end;===Variable für Bookmarksteuerung freigeben===
begin
...
varBookmark := Unassigned;
...
end;===Prüfen, ob eine bestimmte Bookmark vorhanden ist===
begin
...
if varDokument.Bookmarks.Exists('Text1') then ... ; //Prüft, ob eine Bookmark vorhanden ist
...
end;===Bookmarks zählen===
var
intAnz: Integer;
begin
...
intAnz := varDokument.Bookmarks.Count;
...
end;==Formularfelder==
===In ein Formularfeld schreiben===
begin
...
varWdApp.ActiveDocument.FormFields.Item('Text1').Result := 'Versuch'; // schreibt in ein Formularfeld
varWdApp.ActiveDocument.FormFields.Item('Text1').Result := ''; // leert ein Formularfeld
...===Ein Formularfeld auslesen===
var
strText: String;
begin
...
strText := varWdApp.ActiveDocument.FormFields.Item('Text2').Result; // liest ein Formularfeld aus
...
end;Tabellen
===Speicher für die Tabellensteuerung reservieren===
var
varTabelle: oleVariant;===Arbeiten mit neuen Tabellen===
====Variable initialisieren und Tabelle anlegen====
begin
...
varTabelle := varDokument.Tables.Add(varWdApp.Selection.Range, 5, 3);
...
end;====Die neu angelegte Tabelle füllen====
begin
...
varTabelle.Cell(1, 1).Range.Text := 'Januar';
varTabelle.Cell(1, 2).Range.Text := 'Februar';
varTabelle.Cell(1, 3).Range.Text := UTF8ToUTF16('März');
...
end;===Arbeiten mit vorhandenen Tabellen===
var
intAnz: Integer;
begin
...
varDokument.Tables.Item(1).Cell(2, 2).Range.Text:='Hallo'; // fügt in einen Wert in eine Zelle ein
varDokument.Tables.Item(1).Rows.Add(); // fügt am Ende der Tabelle eine Zeile an
intAnz:=varDokument.Tables.Item(1).Rows.Count; // ermittelt die Anzahl der Zeilen
...
end;===Tabellenvariable wieder freigeben===
begin
...
varTabelle := Unassigned;
...
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;
// Klasse WdSaveOptions
wdDoNotSaveChanges = 0;
wdPromptToSaveChanges = -2;
wdSaveChanges = -1;
// Klasse WdCountry
wdArgentina = 54;
wdBrazil = 55;
wdCanada = 2;
wdChile = 56;
wdChina = 86;
wdDenmark = 45;
wdFinland = 358;
wdFrance = 33;
wdGermany = 49;
wdIceland = 345;
wdItaly = 39;
wdJapan = 81;
wdKorea = 82;
wdLatinAmerica = 3;
wdMexico = 52;
wdNetherlands = 31;
wdNorway = 47;
wdPeru = 51;
wdSpain = 34;
wdSweden = 46;
wdTaiwan = 886;
wdUK = 44;
wdUS = 1;
wdVenezuela = 58;
// Klasse WdUnits
wdCell = 12;
wdCharacter = 1;
wdCharacterFormatting = 13;
wdColumn = 9;
wdItem = 16;
wdLine = 5;
wdParagraph = 4;
wdParagraphFormatting = 14;
wdRow = 10;
wdScreen = 7;
wdSection = 8;
wdSentence = 3;
wdStory = 6;
wdTable = 15;
wdWindow = 11;
wdWord = 2;
implementation
end.From the Free Pascal wiki, page "WordAutomation/de", as it stood on 2022-09-11 after a change by Wp, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
